我正在尝试使用proguard来混淆代码,所以我在发布版本类型中启用了minify:
buildTypes { debug { minifyEnabled false } release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt') } }
但是当我生成’release 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' }
虽然proguard-android.txt中的注释指出了一些原因,但我很惊讶看到禁用某些优化的标志,因为默认的自动生成的proguard-android.txt文件在创建新的Android项目时不包含这样的标志.尝试删除以下行,看看是否有改进:
-dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontoptimize -dontpreverify
文件的其余部分似乎很好,虽然我没有检查所有正在使用的库,但我已经检查了一对,并意识到你已经为它们添加了必要的例外.
如果没有成功,你必须确保正确添加正在使用的库的异常,并检查库模块中的proguard-android.txt,因为它在依赖项中被引用.
翻译自:https://stackoverflow.com/questions/43889765/proguard-causes-lag-of-application