android - Proguard minifyEnabled true for debug build, not working on pre-Lollipop -


the methods count of app higher 64k limit, i'm using proguard reduce it.

everything works fine release builds.
debug builds, on other hand, successful lollipop+ devices. when launching on pre-lollipop devices have infamous error:

com.android.dex.dexindexoverflowexception: method id not in [0, 0xffff]: 65536

this have in app level gradle file:

buildtypes {         debug {             minifyenabled true             proguardfiles getdefaultproguardfile('proguard-android.txt'), 'proguard-rules.pro'         }         release {             shrinkresources true             minifyenabled true             proguardfiles getdefaultproguardfile('proguard-android.txt'), 'proguard-rules.pro'         }     } 

i've tried removing minifyenabled true in debug build, , build fails on lollipop+, therefore proguard working! not on pre-lollipop.

for know minifyenabled should not platform dependent, maybe build process skips (for don't know reason) on pre-lollipop devices.

anyone knows solution issue?

ps. i'm aware of multidex possibility, i'm leaving last resort.

edit:

this full code of app level gradle file:

apply plugin: 'com.android.application' apply plugin: 'android-apt' apply plugin: 'me.tatarka.retrolambda'  buildscript {     repositories {         mavencentral()     }      dependencies {         classpath 'me.tatarka:gradle-retrolambda:3.2.5'         classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.5.5'     } }  android {     compilesdkversion 24     buildtoolsversion "23.0.3"     defaultconfig {         applicationid "com.pierfrancescosoffritti.shuffly"         minsdkversion 16         targetsdkversion 24         versioncode 30         versionname "0.13"     }     buildtypes {         debug {             minifyenabled true             proguardfiles getdefaultproguardfile('proguard-android.txt'), 'proguard-rules.pro'         }         release {             shrinkresources true             minifyenabled true             proguardfiles getdefaultproguardfile('proguard-android.txt'), 'proguard-rules.pro'         }     }     compileoptions {         sourcecompatibility javaversion.version_1_8         targetcompatibility javaversion.version_1_8     } }  def dbflow_version = "3.1.1"  dependencies {     compile filetree(include: ['*.jar'], dir: 'libs')     testcompile 'junit:junit:4.12'     apt 'com.jakewharton:butterknife-compiler:8.2.1'     apt "com.github.raizlabs.dbflow:dbflow-processor:${dbflow_version}"     compile "com.github.raizlabs.dbflow:dbflow-core:${dbflow_version}"     compile "com.github.raizlabs.dbflow:dbflow:${dbflow_version}"      compile 'com.android.support:support-v4:24.1.1'     compile 'com.android.support:design:24.1.1'     compile 'com.android.support:recyclerview-v7:24.1.1'     compile 'com.android.support:cardview-v7:24.1.1'     compile 'com.android.support:palette-v7:24.1.1'     compile 'com.jakewharton:butterknife:8.2.1'     compile 'com.github.pierfrancescosoffritti:androidutils:0.5'     compile 'com.github.pierfrancescosoffritti:slidingdrawer:0.10'     compile 'com.github.pierfrancescosoffritti:webbasedoauth:0.7'     compile 'com.github.pierfrancescosoffritti:shrinkingimagelayout:0.4'     compile 'com.github.pierfrancescosoffritti:expandablelayout:0.1'     compile 'com.google.apis:google-api-services-youtube:v3-rev177-1.22.0'     compile 'com.google.api-client:google-api-client-android:1.20.0'     compile 'io.reactivex:rxandroid:1.2.1'     compile 'io.reactivex:rxjava:1.1.8'     compile 'com.squareup.picasso:picasso:2.5.2'     compile 'com.github.commit451:elasticdragdismisslayout:1.0.4'     compile 'com.google.firebase:firebase-core:9.2.1'     compile 'com.google.firebase:firebase-crash:9.2.1'     compile 'com.google.firebase:firebase-ads:9.2.1'     compile 'com.artemzin.rxjava:proguard-rules:1.1.8.0' }  apply plugin: 'com.google.gms.google-services' apply plugin: 'com.getkeepsafe.dexcount' 

project level gradle file:

buildscript {     repositories {         jcenter()     }     dependencies {         classpath 'com.android.tools.build:gradle:2.1.2'         classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'         classpath 'com.google.gms:google-services:3.0.0'         classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.5.5'     } }  allprojects {     repositories {         jcenter()         maven { url "https://jitpack.io" }     } }  task clean(type: delete) {     delete rootproject.builddir } 

proguard rules:

# retrolambda -dontwarn java.lang.invoke.*  # picasso -dontwarn com.squareup.okhttp.**  # admob -keep public class com.google.android.gms.ads.** {    public *; } -keep public class com.google.ads.** {    public *; }  # googleapiclient # needed keep generic types , @key annotations accessed via reflection -keepattributes signature,runtimevisibleannotations,annotationdefault -keepclassmembers class * {   @com.google.api.client.util.key <fields>; } # needed google-http-client-android when linking against older platform version -dontwarn com.google.api.client.extensions.android.** # needed google-api-client-android when linking against older platform version -dontwarn com.google.api.client.googleapis.extensions.android.** # needed google-play-services when linking against older platform version -dontwarn com.google.android.gms.** # com.google.client.util.ioutils references java.nio.file.files when on java 7+ -dontnote java.nio.file.files, java.nio.file.path # suppress notes on licensingservices -dontnote **.ilicensingservice # suppress warnings on sun.misc.unsafe -dontnote sun.misc.unsafe -dontwarn sun.misc.unsafe  # dbflow -keep class * extends com.raizlabs.android.dbflow.config.databaseholder { *; } 

if want try reduce method count, or @ least want understand difference release debug, suggest try looking @ dex count available in 2.2 preview 5, had youtube video (maybe google io) made pretty easy count methods.

this counting methods, if still use same buildtoolsversion "23.0.3" should exact same apk file in both versions of (apart fact 2.2 ships own version of jdk, not supposed in way).

disclaimer: have never used tool apart playing it, wouldn't know recommend after find culprit there.

edit: here's video https://youtu.be/csaxml4xtn8?t=331 "apk analyzer", lives inside "build" menu. don't try reviews earlier 2.2 preview 3 or later, previewd things not released until later.

edit 2: why using shrinkresources on release? that's line suppposed eliminate unneded methods: "minifyenabled" vs "shrinkresources" - what's difference? , how saved space?


Comments