2012-07-13 84 views
5

更新至ADT 20後,我無法再成功導出任何Android項目。我得到:更新至ADT後導出Android項目時的Proguard錯誤

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

我也嘗試從proguard 4.7(隨r20工具一起)更新到proguard 4.8,但這似乎沒有什麼區別。 – ashughes 2012-07-14 17:35:11

+0

在將r20 Android工具中'proguard-android.txt'中添加的proguard規則添加到我的'proguard-project.txt'後,我終於成功地構建並運行了一個模糊的APK。在發佈答案之前等待確認這是一個錯誤:http://code.google.com/p/android/issues/detail?id=35107 – ashughes 2012-07-17 22:15:56

回答

5

有在AAPT一個錯誤,這錯誤將只處理

<fragment android:name"..." /> 

但不

<fragment class="..." /> 

我們會解決AAPT,但同時你可以使用其他屬性,它會工作。

+1

aapt問題解決方案剛剛發佈。它在平臺工具r14中。 – 2012-07-24 22:30:01

+0

必須在平臺工具r14出現之前按照Tor Norbye(「SDK Manager緩存缺陷」)的建議清除我的SDK Manager緩存。 – ashughes 2012-08-03 19:39:16

0

據報道,有一個最近在ADT,這並不正確編譯所有的源代碼Eclipse插件的更新問題。在這種情況下,ProGuard將打印出關於您的程序類的警告(與庫類相對)。您應該檢查導出(和​​生成的應用程序)是否在沒有ProGuard的情況下運行。你還應該檢查Ant構建是否工作(「ant release」)。那可能是一個解決方法。

+0

如果我禁用了proguard,則沒有任何問題。我會直接用蟻來研究。你從哪裏看到關於最新的ADT更新問題的報告?我一直無法找到任何r20,只有以前的版本,我沒有問題。 – ashughes 2012-07-14 23:29:19

+0

我爲Ant構建設置項目,並且在使用「ant release」構建時沒有收到任何警告或錯誤,但是在啓動時崩潰(在擴展支持庫碎片的類上的ClassNotFoundException)。正如我在問題中所述,我在我的'proguard-project.txt'中爲Android支持庫和ActionBarSherlock(http://abs.io/faq.html的底部)和I在proguard之前刪除或混淆這些類沒有任何問題......任何想法我可能會錯過(或可能是什麼工具可以做)? – ashughes 2012-07-15 07:14:36

4

在ADT 20中,我們使用了aapt的一個特性(參見-G標誌),它可以創建一個proguard文件,其中包含的保留規則,正好代碼使用的自定義視圖爲

舊的ProGuard配置文件將保持所有意見。當您使用庫項目(例如兼容性庫)時,可能只使用可用代碼的一小部分,這最終可能會包含許多您不需要的內容。通過刪除通用保持規則,並根據您的應用程序添加新的保留文件,您的.apks會變得更小,因爲可以刪除大量未使用的內容。

如果你更新到Tools 20(所以你有新的較小的proguard-android.txt文件),並且你繼續使用ADT 18,那麼這可能會出錯的一個領域是確保使用ADT 20,因爲它不僅會添加在project.properties設置中指定的proguard文件,還會生成列出來自aapt -G的保留文件的proguard文件。我相信螞蟻的構建也將使用-G功能。

(注 - 見http://code.google.com/p/android/issues/detail?id=35107有這方面的followups)

相關問題