这篇文章上次修改于 1276 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
首先祭出官方源代码地址 => https://github.com/protocolbuffers/protobuf
背景
如图所示
forceHost_
与FORCE_HOST_FIELD_NUMBER
是相对应的
为了能够批量将apk内的代码转换回proto文件,必须知道其中的映射关系
(不像com.squareup.wire
是直接在字段的注解上的)
源代码分析
src/google/protobuf/compiler/java/java_helpers.cc
src/google/protobuf/compiler/java/java_message.cc
src/google/protobuf/compiler/java/java_message_lite.cc
- ...
有关Java的转换,可以定位到UnderscoresToCamelCase
和ToCamelCase
比较关键
至此,可以知道有以下转换
- 原字段名进行翻转,遇到下划线则去掉,并将下划线的上一位大写,遍历直到结束
lower_first
会控制最后一位不会被大写,默认是true- 最终结果会加上下划线
根据上面的信息,可以得出forceHost_
原本是force_host
另外一个函数FieldConstantName
std::string FieldConstantName(const FieldDescriptor* field) {
std::string name = field->name() + "_FIELD_NUMBER";
ToUpper(&name);
return name;
}
基于此可以知道字段的tag的字段名会加上_FIELD_NUMBER
基于以上信息可以将XXX_FIELD_NUMBER
和XXX
关联,这样就可以利用脚本直接还原proto了
没有评论