Android R8如何保留带指定注解成员的类名但混淆成员
保留含指定注解成员的类名并混淆成员的实现方案
完全可以实现,以Android/Java常用的ProGuard/R8混淆工具为例,配置思路如下:
- 先确保自定义的
ABC注解本身不被混淆,否则混淆工具无法识别这个注解标记:
-keep class 你的包路径.ABC { *; }
把你的包路径替换成ABC注解实际所在的包名。
- 添加核心混淆规则,保留所有包含带
@ABC注解成员的类的类名,但不对类成员做保留(默认会混淆成员):
-keepnames class * { @你的包路径.ABC <fields>; @你的包路径.ABC <methods>; }
keepnames的作用是仅保留符合条件的类的名称,不会保留类的成员或其他结构;<fields>匹配所有带注解的字段,<methods>匹配所有带注解的方法,确保只要类里有任意成员被@ABC标记,类名就会被保留;- 因为没有给成员添加
keep规则,所以类里的所有成员(包括示例里的testField和testField2)都会被正常混淆。
如果用的是其他混淆工具,核心逻辑一致:先让工具能识别ABC注解,再配置规则匹配包含该注解成员的类,只保留类名,不对成员做保留设置即可。
内容的提问来源于stack exchange,提问作者Jade
相关产品推荐
相关产品推荐

