2015-10-19 1 views
4

J'utilise MultiDex et ProGuard dans mon application Android. Quand je lance mon application, il s'avère que proguard fonctionne deux fois. Voici les tâches après quoi proguard exécute:L'utilisation de MultiDex dans Android App exécute ProGuard deux fois et seulement une deuxième fois avec des avertissements/notes?

:app:transformClassesAndResourcesWithProguardForRelease 
ProGuard, version 5.2.1 
... 
Initializing... 
Shrinking... 
Obfuscating... 
Writing output... 

et plus tard:

:app:transformClassesWithMultidexlistForRelease 
ProGuard, version 5.2.1 

fichier Voici mon application build.gradle:

buildscript { 
    repositories { 
     maven { url 'https://maven.fabric.io/public' } 
    } 

    dependencies { 
     classpath 'io.fabric.tools:gradle:1.20.1' 
    } 
} 

apply plugin: 'com.android.application' 
apply plugin: 'io.fabric' 
apply plugin: 'com.google.gms.google-services' 


android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 

    defaultConfig { 
     applicationId "de.majestella" 
     minSdkVersion 16 
     targetSdkVersion 22 
     versionCode 3 
     versionName "1.0.1" 

     // Enabling multidex support. 
     multiDexEnabled true 
    } 

    dexOptions { 
     incremental true 
     javaMaxHeapSize "2g" 
    } 


    buildTypes { 
     debug { 
      debuggable true 

      // ProGuard 
      minifyEnabled false 
     } 
     release { 
       signingConfig signingConfigs.release 

       debuggable false 

       // ProGuard 
       minifyEnabled true 
       proguardFiles getDefaultProguardFile('proguard-android.txt'), 
         'proguard-rules.pro', 'proguard-guava.pro', 'proguard-square-picasso.pro', 
         'proguard-crashlytics.pro', 'proguard-google-analytics.pro' 

     } 

    } 

} 

repositories { 
    mavenCentral() 
    maven { 
     name = "sonatype" 
     url = "https://oss.sonatype.org/content/repositories/snapshots/" 
    } 
    maven { 
     name = "sonatypeGoogle" 
     url = "https://oss.sonatype.org/content/repositories/google-snapshots/" 
    } 
    flatDir { 
     dirs 'libs' 
    } 
    maven { url 'https://maven.fabric.io/public' } 

} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.0.1' 
    compile 'com.android.support:design:23.0.1' 


    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
     transitive = true; 
    } 

    compile 'com.android.support:multidex:1.0.1' 

    compile 'com.google.android.gms:play-services-analytics:8.1.0' 
    compile "com.google.android.gms:play-services:8.1.0" 

} 

Après la première manche PROGUARD (après: app: transformClassesAndResourcesWithProguardForRelease) Je reçois les avertissements suivants après writing output, donc proguard fonctionne très bien ici avec mes règles:

Warning: can't write resource [fabric/com.crashlytics.sdk.android.answers.properties] (Duplicate zip entry [fabric/com.crashlytics.sdk.android.answers.properties]) 
Warning: can't write resource [fabric/com.crashlytics.sdk.android.beta.properties] (Duplicate zip entry [fabric/com.crashlytics.sdk.android.beta.properties]) 
Warning: can't write resource [fabric/com.crashlytics.sdk.android.crashlytics-core.properties] (Duplicate zip entry [fabric/com.crashlytics.sdk.android.crashlytics-core.properties]) 
Warning: can't write resource [fabric/com.crashlytics.sdk.android.crashlytics.properties] (Duplicate zip entry [fabric/com.crashlytics.sdk.android.crashlytics.properties]) 
Warning: can't write resource [fabric/io.fabric.sdk.android.fabric.properties] (Duplicate zip entry [fabric/io.fabric.sdk.android.fabric.properties]) 

Lorsque la deuxième manche PROGUARD a lieu après :app:transformClassesWithMultidexlistForRelease je reçois le texte suivant:

Note: android.support.design.widget.CoordinatorLayout calls 'Class.getAnnotation' 
Note: com.google.ads.mediation.MediationServerParameters calls 'Field.getAnnotation' 
Note: com.google.common.eventbus.AnnotatedSubscriberFinder calls 'Method.getAnnotation' 
Note: com.google.common.reflect.Invokable$MethodInvokable calls 'Method.getParameterAnnotations' 
Note: d.a.a.a.c calls 'Class.getAnnotation' 
Note: d.a.a.a.i calls 'Class.getAnnotation' 
Note: android.support.v4.app.ak calls 'Field.getType' 
Note: com.google.android.gms.internal.zzsf calls 'Field.getType' 
... 

Ceci est étrange parce que dans la première manche PROGUARD je reçois pas d'avertissement/notes comme celui-ci à cause de mes règles.

Voici mes règles ProGuard:

-keep class com.google.common.io.Resources { 
    public static <methods>; 
} 
-keep class com.google.common.collect.Lists { 
    public static ** reverse(**); 
} 
-keep class com.google.common.base.Charsets { 
    public static <fields>; 
} 
-keep class com.google.common.collect.MapMakerInternalMap$ReferenceEntry 
-keep class com.google.common.cache.LocalCache$ReferenceEntry 

-dontwarn sun.misc.Unsafe 
-dontwarn com.google.common.collect.MinMaxPriorityQueue 
-keepattributes SourceFile,LineNumberTable,*Annotation* 
-keep class com.crashlytics.android.** 



-dontwarn com.squareup.okhttp.** 

-dontnote org.apache.http.conn.** 
-dontnote org.apache.http.params.** 
-dontnote android.net.http.** 

-dontnote **ILicensingService 
-dontnote com.android.vending.billing.IInAppBillingService 


-dontwarn com.google.auto.factory.** 

-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod 


-dontnote android.support.** 
-dontnote com.google.common.util.concurrent.** 
-dontnote com.squareup.okhttp.** 

-keep class org.jsoup.** { *; } 
-keeppackagenames org.jsoup.nodes 
-keep class com.google.common.cache.Striped64 { *; } 
-keep class com.google.common.** { *; } 
-keep class com.daimajia.slider.** { *; } 


-dontnote org.jsoup.** 
-dontnote com.google.common.** 
-keep class com.squareup.picasso.** { *; } 
-keep class com.google.android.gms.** { *; } 
-keep class com.google.ads.** { *; } 
-keep class com.lorentzos.** { *; } 
-keep public class com.google.android.gms.* { public *; } 
-dontwarn com.google.android.gms.** 

-dontnote com.google.android.gms.maps.internal.CreatorImpl 

-keep class com.mikepenz.iconics.** { *; } 

Il me semble que la deuxième manche ProGuard n'utilise pas mes règles ProGuard.

Edit: Voici le résultat de gradlew -q tasks --all: https://gist.github.com/confile/2a15d80980214656f4f1

Pourquoi la deuxième manche de Proguard soulève des erreurs et comment puis-je les résoudre?

+0

Je ne vois aucune erreur de ProGuard dans votre question, seulement des "notes". – m0skit0

+0

Oui, je veux dire des notes. – confile

+0

Essayez d'exécuter 'gradlew -q tasks --all' pour savoir d'où ça vient. Il listera toutes les tâches avec leurs dépendances. (Il peut être utile d'écrire la sortie dans un fichier, pour faciliter la recherche.) – kevinpelgrims

Répondre