更新到ADT 20后,我无法再成功导出任何Android项目。我明白了:
Proguard returned with error code 1. See console
在控制台中,我收到大量can't find referenced class
警告,偶尔会收到can't find superclass or interface
警告。在警告结束时,我得到类似的结果:
You should check if you need to specify additional program jars.
Warning: there were 199 unresolved references to classes or interfaces.
You may need to specify additional library jars (using '-libraryjars').
java.io.IOException: Please correct the above warnings first.
at proguard.Initializer.execute(Initializer.java:321)
at proguard.ProGuard.initialize(ProGuard.java:211)
at proguard.ProGuard.execute(ProGuard.java:86)
at proguard.ProGuard.main(ProGuard.java:492)
每当我尝试构建时,我会得到不同数量的警告(它不是很一致)。此外,当我在导出之前执行清理时,导出完成而不会产生任何警告,但由于ClassNotFoundException
,生成的APK在启动时崩溃。
我的proguard-project.txt
包含Android支持库和ActionBarSherlock的必要-keep class
规则。
我在ADT 20之前构建这个项目没有任何问题。我甚至尝试构建我的上一个版本(当我发布它时显然构建得很好),但是我得到了相同的proguard警告并且导出失败。
我尝试添加-libraryjars
和/或-dontwarn
规则,正如许多其他SO问题所示,但无济于事。它有时会成功构建,但APK在发布时会崩溃。
有什么建议吗?
答案 0 :(得分:5)
AAPT中存在一个只会处理
的错误<fragment android:name"..." />
但不是
<fragment class="..." />
我们将修复AAPT,但在此期间您可以使用其他属性并且它可以正常工作。
答案 1 :(得分:4)
在ADT 20中,我们使用aapt的功能(请参阅-G标志),该功能可以创建一个proguard文件,其中包含完全代码使用的自定义视图的保留规则。
旧的proguard配置文件将保留所有视图。当您使用诸如兼容性库之类的库项目时,您可能只使用可用代码的一小部分,这可能最终包含许多您不需要的东西。通过删除通用保留规则,并根据您的应用程序添加新的保留文件,您的.apks会变小,因为可以删除大量未使用的内容。
这可能出错的一个方面是如果你更新到工具20(所以你有新的较小的proguard-android.txt文件),你继续使用ADT 18.确保使用ADT 20,因为它将不仅可以添加project.properties设置中指定的proguard文件,还可以添加生成的proguard文件,其中列出了来自aapt -G的keep文件。我相信ant build也会使用-G功能。
(注意 - 有关此事的任何后续内容,请参阅http://code.google.com/p/android/issues/detail?id=35107)
答案 2 :(得分:0)
据报道,最近ADT中的Eclipse插件更新存在问题,但没有正确地重新编译所有源代码。在这种情况下,ProGuard将打印出有关程序类的警告(而不是库类)。您应该检查导出(以及生成的应用程序)是否在没有ProGuard的情况下工作。您还应该检查Ant构建是否有效(“ant release”)。那可能是一种解决方法。