2014-11-08 28 views
2

雖然遇到了dereared dex方法極限錯誤的問題,但我一直在試圖找到問題的快速解決方案。在使用proguard後,我的apk被13k縮小了,其中大部分來自我使用的庫。以下是構建過程的(有點修改的)相關輸出。有什麼方法可以指導Proguard(在Android上)保存中間罐子嗎?

-obfuscate: 
     [mkdir] Created dir: /bin/proguard 
      [jar] Building jar: /bin/proguard/original.jar 
    [proguard] ProGuard, version 5.0 
    [proguard] Reading input... 

    [proguard] Reading program jar [/libs/kryo-2.24.0.jar] 
    [proguard] Reading program jar [/libs/jackson-databind-2.1.1.jar] 
    [proguard] Reading program jar [libs/okhttp-1.1.0.jar] 
    [proguard] Reading program jar [/libs/realm-0.72.0.jar] 
    [proguard] Reading program jar [/libs/tape-1.1.0.jar] 
    [proguard] Reading program jar [/libs/google-play-services.jar] 
    [proguard] Reading program jar [/libs/AudienceNetwork.jar] 

[proguard] Initializing... 
[proguard] Ignoring unused library classes... 
[proguard] Original number of library classes: 7170 
[proguard] Final number of library classes: 1712 
[proguard] Printing kept classes, fields, and methods... 
[proguard] Shrinking... 

有沒有辦法直接Proguard的爲Android節省中間罐,(這些庫適合我的代碼的需求,恰好具有使用一組功能並沒有什麼更多的收縮版本),只是收縮後,但在它們被aapt包裝成一個大塊之前?

回答

2

您可以創建Google Play服務的自定義縮小版本,這可能足以避免65K方法ID限制。來自Droidcon London 2014的我的presentation on creating smaller apps包含一些可能的ProGuard配置來創建這樣一個縮小的庫。

+0

Eric,謝謝你的回覆。我已經在縮小GMS的過程之後。在其他庫上做同樣的事情需要了解包層次結構和手動proguard配置。從你的答案我明白,沒有辦法從收縮過程中獲得中間罐。 – Rotemmiz 2014-11-11 10:51:42

+0

ProGuard將程序代碼和庫視爲縮小/優化/模糊處理的一大塊代碼,因此確實沒有中間罐。考慮到您的應用有大量的輸入類和相對較少的輸出類,應該可以將最大的庫縮小到可管理的大小。通過演示文稿中的簡短配置,它確實不那麼難。請注意,示例配置僅保留GPS庫中與特定應用程序相關的部分。 – 2014-11-11 11:29:40

相關問題