这篇文章上次修改于 1617 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
首先祭出官方源代码地址 => https://github.com/protocolbuffers/protobuf
背景

如图所示
forceHost_与FORCE_HOST_FIELD_NUMBER是相对应的
为了能够批量将apk内的代码转换回proto文件,必须知道其中的映射关系
(不像com.squareup.wire是直接在字段的注解上的)
源代码分析
src/google/protobuf/compiler/java/java_helpers.ccsrc/google/protobuf/compiler/java/java_message.ccsrc/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了
没有评论