是否可以启用 Proguard 但让某些类完全不受 Proguard 影响?我的 proguard 配置文件中有以下几行:
-keep class com.heyzap.** { *; }
但正如我所看到的,在 Proguard 通过后,Heyzap 包中的类实际上发生了变化(它们与我最初在 Heyzap jar 文件中的类不同)。
我不知道 Proguard 对 Heyzap SDK 到底做了什么,但是在这个构建过程失败后将 jar 文件转换为 dex 格式并出现错误:
EXCEPTION FROM SIMULATION: com.android.dx.rop.cst.CstInterfaceMethodRef cannot be cast to com.android.dx.rop.cst.CstMethodRef
我的配置中还启用了 -dontoptimize 选项。
Heyzap 建议使用此行以保持其 SDK 不变:
-libraryjars libs/heyzap-ads-sdk.jar
但是 Android Studio 无法编译添加了这一行的项目,因为 heyzap-ads-sdk.jar 被自动添加到 -injars 列表(它抛出 '同一个输入 jar 被指定了两次。'错误)。
最佳答案
要使 ProGuard 完全忽略您可以使用的包:
-keepclasseswithmembers class com.my.package.** {*;}
但是,你得到的错误意味着别的东西,你应该尝试从你的 ProGuard 文件中删除 -libraryjars libs/heyzap-ads-sdk.jar,因为这个库可能被添加在你的 build.gradle 文件中的其他地方,可能是这一行:
compile fileTree(dir: 'libs', include: ['*.jar'])
关于android - 让 Proguard 完全忽略包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31128266/