使用 Ant 和 Proguard 编译 Android 应用程序的问题
Posted
技术标签:
【中文标题】使用 Ant 和 Proguard 编译 Android 应用程序的问题【英文标题】:Problems compiling an Android App with Ant and Proguard 【发布时间】:2012-02-13 00:56:05 【问题描述】:我有一个包含不同模块的 android 应用程序。 Main 模块使用了一些库,例如 Google 的 GSON 或 v4.support.package。带有正确 proguard.cfg 的自定义构建脚本也将构建它。 现在我必须集成另一个使用部分相同库(GSON support.v4)的“Android-Library”。除了得到很多像
这样的笔记注意:程序类[com.google.gson.Gson]的重复定义
我也收到了一些类似的笔记
[proguard] 注意:com.google.gson.UnsafeAllocator:找不到动态引用的类 sun.misc.Unsafe
[proguard] 注意:配置参考未知类'sun.misc.Unsafe'
我觉得很奇怪,因为我的 Proguard.cfg 中有一些“保留”,特别是为此:
-keepattributes 签名,注解
-keep class com.google.gson.** *;
-保持类 sun.misc.Unsafe *;
它在我的项目中运行良好,无需引用其中的模块库。 我在最新的 SDK 和工具上,并在模块库中添加了一个自定义 proguard.cfg,它在模块库本身上运行良好(如果以独立模式构建)。 在我看来,构建不依赖于库项目中的自定义 proguard.cfg。任何关于尝试什么的想法都非常感谢
【问题讨论】:
【参考方案1】:我自己终于找到了解决方案: 使用最后一个 Android 工具 (16),每个 Android-Library 都会首先自行编译。 因此,当 lib 没有“标准”构建并定义了一些自定义构建脚本时,包括 proguard --keeps,并且这个 --keeps 是在同一个项目上定义的(不包括 Android SDK 类,因为它们没有被编译),它会导致一个proguard错误。 解决方案是从库中删除 proguard 并将 --keeps 复制到主应用程序中
【讨论】:
这个答案没有任何意义......需要解释一下吗? “复制主应用程序中的--keeps”是什么意思?以上是关于使用 Ant 和 Proguard 编译 Android 应用程序的问题的主要内容,如果未能解决你的问题,请参考以下文章
Ant 似乎在打包 apk 时忽略了 Proguard 生成的 jar
Java Ant - 如何传递 ProGuard 任务参数并在配置文件中使用它们?