ProGuard вызывает задержку применения

Я пытаюсь обфускать код с помощью 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 файл proguard-android.txt не содержит таких флагов при создании нового проекта Android. Попробуйте удалить следующие строки и посмотреть, есть ли улучшения:

 -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontoptimize -dontpreverify 

Остальная часть файла кажется прекрасной, хотя я не проверил все библиотеки, которые используются, но я проверил пару и понял, что вы добавили необходимые исключения для них.

Если это не сработало, вам нужно будет убедиться, что исключения для библиотек, которые используются, добавлены правильно, а также проверьте proguard-android.txt внутри вашего library модуля, поскольку он ссылается на зависимости.

Java всегда работает медленно в первый раз. Потому что он должен быть загружен и интерпретирован. Повторите тест. Посмотрите на этот вопрос.

Java-программа работает медленнее, когда код, который никогда не выполняется, закомментирован

ProGuard не вызывает отставание приложения во время выполнения. Это может быть связано с тем, что одна из ваших библиотек включена в файл gradle.

Я настоятельно рекомендую вам использовать профилировщик студии Android, чтобы узнать, что и как работает приложение. Под этим я подразумеваю память, процессор, сеть и т. Д. Сохраните результаты для сравнения, а затем попробуйте одну и ту же версию приложения только с изменениями proguard. Очень маловероятно, что удар производительности происходит от proguard. Если возможно, проведите результаты и ваши наблюдения здесь для дальнейшего анализа. Также обратите внимание, что существует также разница в типе сборки, есть ли у вас другой код в отладочных / отладочных вариантах?