【问题标题】:Make Proguard completely ignore package使 Proguard 完全忽略包
【发布时间】:2015-09-16 15:49:24
【问题描述】:

是否可以启用 Proguard 但保持某些类完全不受 Proguard 影响?我的 proguard 配置文件中有以下几行:

-keep class com.heyzap.** { *; }

但正如我所见,Heyzap 包中的类在 Proguard 通过后实际上已经发生了变化(它们与我最初在 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被指定了两次。'错误)。

【问题讨论】:

    标签: android android-studio android-gradle-plugin


    【解决方案1】:

    要让 ProGuard 完全忽略你可以使用的包:

    -keepclasseswithmembers class com.my.package.** {*;}
    

    但是,你得到的错误意味着别的东西,你应该尝试从你的 ProGuard 文件中删除 -libraryjars libs/heyzap-ads-sdk.jar,因为这个库可能正在被添加在你的 build.gradle 文件中的其他地方,可能是这一行:

    compile fileTree(dir: 'libs', include: ['*.jar'])
    

    【讨论】:

    • 我尝试了“keepclasseswithmembers”,但我的课程仍然被修改。是的,当然我不能使用“libraryjars”选项,因为 Heyzap jar 是从我的 build.gradle 添加的。但我需要让 proguard 远离它,就像使用“libraryjars”一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多