Proguard技术问题:如何避免与混淆后的库类名产生命名冲突?
ProGuard命名冲突解决方案
问题背景
已混淆的第三方库JAR中包含类:
com.mycompany.a.a.c
使用ProGuard混淆自有代码时,工具未检测到该库中的类,将自有类com.mycompany.foo.bar.ClassA混淆为com.mycompany.a.a.c,引发命名冲突。
方案一:保留com.mycompany.foo包前缀不混淆
在ProGuard配置文件中添加规则,强制保留目标包的完整结构:
# 保留com.mycompany.foo包及所有子包的类结构与类名 -keep class com.mycompany.foo.** { *; }
若仅需保留包前缀(允许混淆类名但保留包路径),可使用以下规则:
# 保留com.mycompany.foo包结构,允许混淆类名 -keepnames class com.mycompany.foo.** -keepclassmembers class com.mycompany.foo.** { *; }
方案二:重命名com.mycompany.foo包前缀为com.mycompany.aa
通过ProGuard的包重命名规则,将目标包替换为新前缀,规避冲突:
# 将com.mycompany.foo及其子包统一重命名为com.mycompany.aa -repackageclasses 'com.mycompany.aa' -allowaccessmodification
如需更精确的单包重命名,可使用:
# 精确重命名com.mycompany.foo包为com.mycompany.aa -renamesourcefileattribute SourceFile -keepattributes SourceFile,LineNumberTable -adaptclassstrings -renamepackage com.mycompany.foo to com.mycompany.aa
内容的提问来源于stack exchange,提问作者eastwater
相关产品推荐
相关产品推荐

