2013-05-07 104 views
4

我想配置ProGuard,並將面臨與按優先級排序的一些問題:安卓:配置Proguard的

  • 我收到重複的警告,拉鍊,不能修復它。 我在「libs」目錄和2個庫項目中使用外部庫(一個庫項目有一個外部庫 - 只添加到項目一次),這些項目只添加到項目一次。我試圖將我的外部罐子移動到另一個目錄,即「lib」 - 只是因爲一些用戶已經設法解決它而重命名,但它不能幫助我。另一種方法是試圖實現custom_rules到基本的build.xml,因爲它可以幫助一些用戶避免這些警告。但是它的一切都不能幫助我,我該如何解決它?登錄:

    ProGuard: Note: com.google.analytics.tracking.android.AdHitIdGenerator: can't find dynamically referenced class com.google.ads.AdRequest 
    ProGuard: Note: the configuration refers to the unknown class 'com.google.vending.licensing.ILicensingService' 
    ProGuard: Note: the configuration refers to the unknown class 'com.android.vending.licensing.ILicensingService' 
    

完全proguard的文件:

ProGuard: Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [jackson-annotations-2.1.4.jar:META-INF/MANIFEST.MF]) 
ProGuard: Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [android-support-v4.jar:META-INF/MANIFEST.MF]) 
ProGuard: Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [google-analytics-v2.jar:META-INF/MANIFEST.MF]) 
ProGuard: Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [jackson-core-2.1.4.jar:META-INF/MANIFEST.MF]) 
ProGuard: Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [httpclientandroidlib-1.1.2.jar:META-INF/MANIFEST.MF]) 
ProGuard: Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [deviceprint-lib-1.0.0.jar:META-INF/MANIFEST.MF]) 
  • 最後一件事簽署APK建設過程中的一些注意事項

    -optimizationpasses 5 
    -dontusemixedcaseclassnames 
    -dontskipnonpubliclibraryclasses 
    -dontpreverify 
    -verbose 
    
    # Otherwise return Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry 
    -dontwarn com.fasterxml.jackson.databind.** 
    
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 
    
    # Preserve all fundamental application classes. 
    -keep public class * extends android.app.Activity 
    -keep public class * extends android.app.Application 
    -keep public class * extends android.app.Service 
    -keep public class * extends android.view.View 
    -keep public class * extends android.preference.Preference 
    -keep public class * extends android.content.BroadcastReceiver 
    -keep public class * extends android.content.ContentProvider 
    
    # Preserve ActionBarSherlock and Android support libraries` classes and interfaces 
    -keep class android.support.** { *; } 
    -keep interface android.support.** { *; } 
    -keep class com.actionbarsherlock.** { *; } 
    -keep interface com.actionbarsherlock.** { *; } 
    
    # Preserve all Jackson library classes 
    -keep class com.fasterxml.jackson.** { *; } 
    
    # Original 
    -keepclasseswithmembernames class * { 
        native <methods>; 
    } 
    
    -keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
    } 
    
    -keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    } 
    
    -keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
    } 
    
    -keepclassmembers class **.R$* { 
        public static <fields>; 
    } 
    
    -keepclassmembers class * extends android.app.Activity { 
    public void *(android.view.View); 
    } 
    
    -keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
    } 
    
    #To remove debug logs: 
    -assumenosideeffects class android.util.Log { 
        public static *** d(...); 
        public static *** v(...); 
    } 
    
  • 回答

    5

    您目前列出的6條警告和3條記錄是無害的。

    您應該確保您使用的是最新版本的Android SDK,它會爲您的項目創建一個空的proguard-project.txt文件。標準的Ant構建和Eclipse構建在內部處理重要的配置(我假定您使用的是來自IDEA的Ant)。您仍然可以將特定於應用程序的選項添加到proguard-project.txt中,如Jackson和ActionBarSherlock的-keep選項。不要添加像-injars/-libraryjars/-outjars這樣的選項,因爲構建過程會爲您指定它們。

    +0

    我希望這些警告和說明是真正無害的。一般來說,儘管有這些消息,但該應用似乎仍能正常工作。至於其他你的建議,我現在就和你說的一樣 - 最後一個Android SDK,從IDEA構建簽名的apk(沒有嘗試從命令行運行Ant來構建Ant),刪除所有由於它而產生的傷害,outjats,libjars會導致出現更多重複記錄,請使用-keep來包裝未受影響的類 – user1376885 2013-05-09 10:51:00

    5

    有在#1這裏討論類似的問題:

    Android Proguard Duplicate Definition

    Duplicate resources when using ProGuard and an Android application

    Android - Proguard duplicate zip entry error

    在你的情況,我覺得第一個可以幫助你......

    如果這沒有幫助,我們應該從那裏這個問題來。我甚至在Playstore上有第三方庫的應用程序,並且我對proguard沒有任何問題。這裏是我的proguard.cfg設置從我與第三方lib和谷歌拉特許可的應用程序之一:

    -optimizationpasses 5 
    -dontusemixedcaseclassnames 
    -dontskipnonpubliclibraryclasses 
    -dontpreverify 
    -dontwarn **CompatHoneycomb 
    -keep class android.support.v4.** { *; } 
    -dontwarn org.apache.** 
    -verbose 
    -dontoptimize 
    -dontshrink 
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 
    -keepattributes *Annotation* 
    -dontwarn com.google.ads.** 
    

    好,你鴕鳥政策需要所有這些,這取決於你已經實現或第三方庫你用。所以,我無法看到你的應用程序結構,也沒有代碼,這將超出範圍。我建議你只是一個一個地測試。

    +0

    我已經嘗試通過這些方法解決這個問題,並再次嘗試它,但它不能幫助我。我收到了數千個筆記 - 程序類的重複定義+一些錯誤 - 「引起:java.io.IOException:重複的zip條目[jackson-databind-2.1.4.jar:com/fasterxml/jackson/databind/AbstractTypeResolver.class ]「apk安裝過程中。我使用IDEA IDE進行android開發和apk構建,看起來這個IDE會自動寫入jar,當然,當我嘗試添加傷害時,我也會收到更多的註釋和警告,因爲我嘗試將jar兩次寫入。還有什麼想法? – user1376885 2013-05-07 14:58:48

    +0

    我非常確定第一種方式應該可以幫助我(至少我通過對此解決方案的正面反饋來看到它),但對我來說這不是如此,也許是認真對待IDEA的原因。你如何看待以及如何改變這種IDE行爲?我試圖找到類似的這種行爲在谷歌,但沒有積極的結果。 – user1376885 2013-05-07 15:02:16