【问题标题】:ProGuard issues with Android Archieve(.aar) libraryAndroid Archieve(.aar) 库的 ProGuard 问题
【发布时间】:2015-06-17 12:41:55
【问题描述】:

我有一个要以 AAR 格式分发的库项目。我已经在上面应用了 ProGuard。

如果我将此库用作模块,ProGuard 设置效果很好,但当我使用生成的 AAR 时则不行。基本上它失败并出现异常“java.lang.IllegalArgumentException:已添加 Lmy/lib/package/name/R;”在应用程序项目中。

ProGuard 正在将我的 lib 类之一重命名为 R,我觉得这是导致 Application 项目出现问题的原因,因为 R 用于资源。

如何在 Studio 中指定 proguard 映射以告诉它不要重命名为 R。

更新: 将 AAR 文件添加为新模块后,出现此错误:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lmy/lib/package/name/R;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
    at com.android.dx.command.dexer.Main.run(Main.java:246)
    at com.android.dx.command.dexer.Main.main(Main.java:215)
    at com.android.dx.command.Main.main(Main.java:106)

【问题讨论】:

    标签: android-studio proguard aar


    【解决方案1】:

    好吧,回答我自己。

    尝试在 .aar 上手动运行 ProGuard,使用最新版本 v5.2.1。不适用于 Studio v1.2.2 附带的默认版本 v4.7。希望这会有所帮助。

    【讨论】:

    • 能否请您提及您是如何在 .aar 文件上运行它的?
    • 我确实使用了 ProgGuard v5.2.1 提供的 android.pro 示例文件。为我的依赖 jars 提供了“-libraryjars”,输入 .aar 作为“-injars”,输出 .aar 作为“-outjars”。还必须在同一个 .pro 文件中添加 .aar 特定的 proguard 规则。在输入 .aar 中手动添加 proguard.txt。使用命令“proguard.bat @android.pro”(在 Windows 上)。希望这会有所帮助。
    • 有谁知道如何在 gradle 构建过程中自动执行此操作?
    • 它现在可以在 Android Studio 中自动运行。不记得从哪个版本开始工作了。
    猜你喜欢
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2018-05-19
    • 1970-01-01
    相关资源
    最近更新 更多