android - Android 上的 Proguard 坏了吗?

标签 android ant obfuscation proguard

我曾经能够按照指南here将 Proguard 作为构建的一部分进行设置和运行,没有任何问题。但是,自从更新到最新版本的 ADT 工具后,我遇到了麻烦。我遇到的第一个问题是:

BUILD FAILED
/home/myhome/projects/myapp/add-proguard-release.xml:14:
/home/myhome/projects/myapp/${out.classes.dir} does not exist.

所以我最终不得不在 local.properties 或 project.properties 中手动定义 ${out.classes.dir}。不是世界末日,只是有点痛。

第二个更严重的问题与外部 jar 有关。我在一个外部 jar 里有一堂小课。当应用程序在设备上启动时,应用程序崩溃:

11-15 18:35:30.090: E/AndroidRuntime(28258): java.lang.NoClassDefFoundError: com.mysoftware.informaltimeprovider.InformalTimeProvider
11-15 18:35:30.090: E/AndroidRuntime(28258):    at com.mysoftware.pagemonitor.PrintableTimeProvider.getInformalTime(PrintableTimeProvider.java:14)

尝试创建InformalTimeProvider实例时崩溃,但从logcat输出来看,这个类没有被混淆,所以我不知道为什么会出现问题。

构建过程中出现警告:

[proguard]   Copying resources from program jar [/home/myhome/projects/pagemonitor/libs/InformalTimeProvider.jar]
[proguard] Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [InformalTimeProvider.jar:META-INF/MANIFEST.MF])

虽然这只是一个警告 - 我不希望发生崩溃。

感谢收到的任何帮助。

巴里

最佳答案

Proguard 最小化应用程序大多无法开箱即用。在大多数情况下,您必须手动指定需要保留的其他类。

在你的情况下,我将从添加配置行开始

-keep class com.mysoftware.informaltimeprovider.InformalTimeProvider

这明确地告诉混淆器这个类是必需的,不能被删除。如果之后您的应用程序错过了另一个类,请告诉混淆器也保留它。

您将逐步接近一个功能完备的应用程序。我知道这种尝试错误的方法并不好,但优化 Java 应用程序并不是那么简单,可以完全自动化。尤其是通过字符串加载类和其他与运行时相关的技巧会与混淆器发生冲突。

关于android - Android 上的 Proguard 坏了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8141473/

相关文章:

java - 如何修复 'android.os.NetworkOnMainThreadException' ?

应用程序启动时模拟器中的 Android 初始错误

java - 运行 ant 文件时构建失败

Ant:如何从命令行传入的逗号分隔列表中设置属性?

Eclipse 3.4 ant 任务挂起

java - 需要更快的 Word Builder 算法

ant - 如何加快 Ant 构建过程

javascript - 在 html5 中,如果您创建游戏等,是否会公开所有源代码?

actionscript-3 - 是否有任何反向工程师具有secureSWF的经验?

Android资源链接在绑定(bind)适配器数据绑定(bind)中失败