使用 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

ProGuard Ant 任务的多个配置文件

Ant与Proguard集中

Java Ant - 如何传递 ProGuard 任务参数并在配置文件中使用它们?

用于 Android Proguard 混淆的 ANT 构建

Java:如何使用自定义 Ant build.xml 将 ProGuard 集成到 Jar 项目中