ProGuard导致应用程序滞后

我试图混淆与proguard的代码,所以我启用minify在发布构buildtypes:

 buildTypes { debug { minifyEnabled false } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt') } } 

但是,当我生成“释放apk”,并在我安装后,应用程序运行速度减慢(滞后)..为什么这种情况发生与minify启用? 这是我的依赖:

 dependencies { compile 'com.android.support:support-v4:25.3.1' compile 'com.android.support:recyclerview-v7:25.3.1' compile 'com.android.support:palette-v7:25.3.1' compile 'com.google.protobuf.nano:protobuf-javanano:3.0.0-alpha-2' compile 'com.jrummyapps:colorpicker:2.1.6' compile 'org.apache.commons:commons-lang3:3.4' compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:design:25.3.1' compile project(':library') testCompile 'junit:junit:4.12' androidTestCompile 'com.android.support.test:runner:0.5' androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' androidTestCompile 'com.android.support:support-annotations:25.3.1' } 

这是我的proguard-android.txt

 # This is a configuration file for ProGuard. # http://proguard.sourceforge.net/index.html#manual/usage.html -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -verbose # Optimization is turned off by default. Dex does not like code run # through the ProGuard optimize and preverify steps (and performs some # of these optimizations on its own). -dontoptimize -dontpreverify # Note that if you want to enable optimization, you cannot just # include optimization flags in your own project configuration file; # instead you will need to point to the # "proguard-android-optimize.txt" file instead of this one from your # project.properties file. -keepattributes *Annotation* -keep public class com.google.vending.licensing.ILicensingService -keep public class com.android.vending.licensing.ILicensingService # For native methods, see http://proguard.sourceforge.net/manual/examples.html#native -keepclasseswithmembernames class * { native <methods>; } # keep setters in Views so that animations can still work. # see http://proguard.sourceforge.net/manual/examples.html#beans -keepclassmembers public class * extends android.view.View { void set*(***); *** get*(); } # We want to keep methods in Activity that could be used in the XML attribute onClick -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); } # For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keepclassmembers class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator CREATOR; } -keepclassmembers class **.R$* { public static <fields>; } # The support library contains references to newer platform versions. # Don't warn about those in case this app is linking against an older # platform version. We know about them, and they are safe. -dontwarn android.support.** # Understand the @Keep support annotation. -keep class android.support.annotation.Keep -keep @android.support.annotation.Keep class * {*;} -keepclasseswithmembers class * { @android.support.annotation.Keep <methods>; } -keepclasseswithmembers class * { @android.support.annotation.Keep <fields>; } -keepclasseswithmembers class * { @android.support.annotation.Keep <init>(...); } 

我试着添加:

 -keep class com.mylibrary.** -keep interface com.mylibrary.** -keep enum com.mylibrary.** 

我的库依赖关系:

 dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:palette-v7:25.3.1' testCompile 'junit:junit:4.12' compile 'com.google.code.gson:gson:2.8.0' compile 'org.jetbrains:annotations-java5:15.0' } 

Solutions Collecting From Web of "ProGuard导致应用程序滞后"

尽pipeproguard-android.txt的注释指定了一些原因,但是我惊奇地看到禁止某些优化的标志,因为在创build新的Android项目时默认的自动生成的proguard-android.txt文件不包含这样的标志。 尝试删除以下行,看看是否有改进:

 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontoptimize -dontpreverify 

文件的其余部分似乎很好,虽然我没有检查出所有正在使用的库,但我已经检查了一对夫妇,并意识到你已经为他们添加了必要的例外。

如果不能解决问题,你必须确保正在使用的库的exception被正确添加,并且检查library模块中的proguard-android.txt因为它在依赖关系中被引用。

Java总是第一次运行缓慢。 因为它必须被加载和解释。 再次运行testing。 看看这个问题。

当永远不会执行的代码被注释掉时,Java程序会运行得更慢

ProGuard在运行时不会导致应用程序滞后。 这可能是由于你的库包含在gradle文件中。

我强烈build议您使用Android Studio分析器来查看应用程序的行为。 通过这个我的意思是内存,CPU,networking等保存结果进行比较,然后尝试使用相同的应用程序版本与proguard更改。 性能打击来自proguard是不太可能的。 如果可能的话,将结果和您的观察结果传给进一步分析。 另外请注意,构buildtypes也有所不同,在debugging/发布版本中是否有不同的代码?