2016-06-26 5 views
3

Ich aktualisiere mein Android-Projekt auf 24 SDK-Version.Proguard Fehler beim Auswerten der Anweisung

Aber ich habe Fehler in Proguard Weg Baujahr:

Unexpected error while evaluating instruction: 
    Class  = [com/google/android/gms/iid/zzd] 
    Method  = [zzeC(Ljava/lang/String;)V] 
    Instruction = [11] invokevirtual #50 
    Exception = [java.lang.ArrayIndexOutOfBoundsException] (1) 
Unexpected error while performing partial evaluation: 
    Class  = [com/google/android/gms/iid/zzd] 
    Method  = [zzeC(Ljava/lang/String;)V] 
    Exception = [java.lang.ArrayIndexOutOfBoundsException] (1) 
Warning: Exception while processing task java.io.IOException: java.lang.ArrayIndexOutOfBoundsException: 1 
:PC:transformClassesAndResourcesWithProguardForDebug FAILED 

FAILURE: Build failed with an exception. 

Meine proguard.cfg Datei:

-printmapping /build/proguard-mapping.txt 
-printusage /build/proguard-usage.txt 
-printseeds /build/proguard-seeds.txt 
-printconfiguration /build/proguard-configuration.txt 

-optimizationpasses 5 
-dontskipnonpubliclibraryclasses 
-dontskipnonpubliclibraryclassmembers 
#-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 
-optimizations !class/unboxing/enum 
-allowaccessmodification 
-repackageclasses '' 
-keepattributes Signature 
-keepattributes SetJavaScriptEnabled 
-keepattributes JavascriptInterface 
-keepattributes InlinedApi 
-keepattributes SourceFile, LineNumberTable 
-keepattributes *Annotation* 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class * extends android.preference.Preference 

-libraryjars /libs 

-dontwarn android.** 
-dontwarn com.android.** 
-dontwarn com.google.** 
-dontwarn okio.** 

-keep class com.google.** {*;} 
-keepclassmembers class com.google.** { *; } 

-keep class com.android.** {*;} 
-keepclassmembers class com.android.** { *; } 

-keep class okio.** {*;} 
-keepclassmembers class okio.** { *; } 

Build.gradle im Projekt:

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.1.2' 
     classpath 'com.google.gms:google-services:3.0.0' 
    } 
} 

Build.gradle in der App:

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

buildscript { 
    repositories { 
     jcenter() 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.1.2' 
    } 
} 

android { 
    compileSdkVersion 24 
    buildToolsVersion "24.0.0" 

    defaultConfig { 
     minSdkVersion 11 
     targetSdkVersion 24 
     signingConfig signingConfigs.release 
    } 

    buildTypes { 
     debug { 
      debuggable true 
      minifyEnabled true 
      signingConfig signingConfigs.release 
      proguardFile 'proguard.cfg' 
     } 
     release { 
      debuggable true 
      minifyEnabled true 
      signingConfig signingConfigs.release 
      proguardFile 'proguard.cfg' 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    compile 'com.google.android.gms:play-services-gcm:9.0.0' 
    compile 'com.android.support:support-v4:24.0.0' 
    compile 'com.android.support:appcompat-v7:24.0.0' 
} 

Diese Konfiguration funktioniert gut auf 22 Android SDK, aber nach dem Update auf 24 bekam Fehler.

Ich versuche hinzufügen nächsten, aber nicht den Erfolg:

-keep class com.google.android.gms.analytics.** 
-keep class com.google.analytics.tracking.** 
-dontwarn com.google.android.gms.analytics.** 
-dontwarn com.google.analytics.tracking.** 

Was mein Fehler ist und was eine Lösung?

+0

Warum Sie nicht verwenden 'proguardFiles getDefaultProguardFile ('proguard-android-optimize.txt')'? – tynn

+0

Ich versuche es, aber nicht ändert –

+0

Können Sie versuchen, die folgenden Klassen so zu halten, dass sie nicht optimiert werden: -keep, allowshrinking class com.google.android.gms.iid. ** {*; } –

Antwort

1

Dies wird von buildtools verursacht, die mit der 8.4-Version von Google Play Services arbeiten. Ich habe versucht, die bestimmte Klasse von der Optimierung mit -keep auszuschließen, aber es hat nicht funktioniert. Ich landete mit der Migration Play-Dienste 9.0.2 to google:

classpath 'com.android.tools.build:gradle:2.0.0' 
classpath 'com.google.gms:google-services:3.0.0' 

...

buildToolsVersion "24.0.0" 

...

// google play services 
compile ('com.google.android.gms:play-services-gcm:9.0.2') 
compile ('com.google.android.gms:play-services-analytics:9.0.2') 

...

0

Wenn Sie don Fühlen Sie sich nicht wie die Play-Dienste zu stoßen nur noch können Sie auch die folgenden Optimierungen ausschalten in ProGuard, z.B. Offensichtlich

-optimizations !method/marking/private,!method/marking/static,!method/removal/parameter,!method/propagation/parameter

, könnte dies eine Leistungseinbuße bedeuten, so umsichtig verwenden.

2

ich mit den folgenden proguard Optionen endete:

# WORKAROUND for building project with GMS (google play services) 
-keep class com.google.android.gms.iid.zzd { *; } 
-keep class android.support.v4.content.ContextCompat { *; }