更新到ADT 20后导出Android项目时出现Proguard错误

时间:2012-07-13 19:21:38

标签: android adt proguard

更新到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在发布时会崩溃。

有什么建议吗?

3 个答案:

答案 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”)。那可能是一种解决方法。

相关问题