Proguard on Android Broken?



我过去能够按照这里的指南来设置和运行Proguard,作为构建的一部分,没有任何问题。但是,由于更新到最新版本的ADT工具,我遇到了麻烦。我遇到的第一个问题是:

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

所以我最后不得不定义${out.classes。在本地手动设置Dir}。属性或project.properties。不是世界末日,只是有点痛。

第二个更严重的问题与外部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

这显式地告诉proguard这个类是必需的,不能被删除。如果之后你的应用错过了另一个类,告诉proguard也保留它。

一步一步地你会更接近一个完全工作的应用程序。我知道这种尝试和错误的方法不是很好,但优化Java应用程序并不是那么简单,它可以完全自动化。特别是通过string加载类和其他运行时相关的技巧会与proguard发生冲突。

相关内容

  • 没有找到相关文章

最新更新