2013-05-07 79 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