2017-08-22 2 views
0

J'essaie de libérer mon application, mais j'ai besoin de l'apk pour être obfusqué + Je voudrais couper une certaine taille. Je n'ai pas non plus besoin de signer l'apk, donc la construction de débogage le ferait.ProGuard - Application fonctionne bien dans l'émulateur, mais échoue lors de la tentative de construction apk

J'utilise quelques bibliothèques:

  • Goyave 22,0
  • Okhttp 3.8.1
  • SimpleXML 2.7 +
  • EventBus 3.0
  • Apache Common Codec 1.10
.

Les erreurs que j'obtiens actuellement pendant la construction d'apk:

Warning:com.google.common.util.concurrent.FuturesGetChecked$GetCheckedTypeValidatorHolder$ClassValueValidator$1: can't find superclass or interface java.lang.ClassValue 
Warning:com.google.common.util.concurrent.FuturesGetChecked$GetCheckedTypeValidatorHolder$ClassValueValidator: can't find referenced class java.lang.ClassValue 
Warning:com.google.common.util.concurrent.FuturesGetChecked$GetCheckedTypeValidatorHolder$ClassValueValidator$1: can't find referenced class java.lang.ClassValue 
Warning:there were 8 unresolved references to classes or interfaces. 
Warning:Exception while processing task java.io.IOException: Please correct the above warnings first. 
Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForDebug'. 
> Job failed, see logs for details 

règles ProGuard actuelles:

#EventBus 
-keepclassmembers class ** { 
    @org.greenrobot.eventbus.Subscribe <methods>; 
} 
-keep enum org.greenrobot.eventbus.ThreadMode { *; } 

-printmapping out.map 
-keepparameternames 
-renamesourcefileattribute SourceFile 
-keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,EnclosingMethod 

-keepattributes *Annotation* 

-allowaccessmodification 
-optimizationpasses 3 

-keep public class * { 
    public protected *; 
} 

-keepclassmembernames class * { 
    java.lang.Class class$(java.lang.String); 
    java.lang.Class class$(java.lang.String, boolean); 
} 

-keepclassmembernames class * { 
    native <methods>; 
} 

-keepclassmembers class * extends java.lang.Enum { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

#SimpleXML 
-dontwarn com.bea.xml.stream.** 
-dontwarn org.simpleframework.xml.stream.** 
-keep public class org.simpleframework.** { *; } 
-keep class org.simpleframework.xml.** { *; } 
-keep class org.simpleframework.xml.core.** { *; } 
-keep class org.simpleframework.xml.util.** { *; } 
-keepattributes ElementList, Root 
-keepclassmembers,allowobfuscation class * { 
    @org.simpleframework.xml.* <fields>; 
    @org.simpleframework.xml.* <init>(...); 
} 
-keepclassmembers class * { 
    @org.simpleframework.xml.* *; 
} 


#guava 
-dontwarn com.google.errorprone.annotations.CanIgnoreReturnValue 
-dontwarn com.google.errorprone.annotations.concurrent.LazyInit 
-dontwarn com.google.errorprone.annotations.ForOverride 
-dontwarn com.google.errorprone.annotations.IncompatibleModifiers 
-dontwarn com.google.errorprone.annotations.RequiredModifiers 
-dontwarn com.google.errorprone.annotations.Var 
-dontwarn javax.inject.** 
-dontwarn sun.misc.Unsafe 
-dontwarn com.google.common.util.concurrent.** 

#okhttp3 
-dontwarn okio.** 
-dontwarn javax.annotation.Nullable 
-dontwarn javax.annotation.ParametersAreNonnullByDefault 

build.gradle:

apply plugin: 'com.android.application' 

android { 
    compileSdkVersion 26 
    buildToolsVersion "26.0.0" 
    defaultConfig { 
     applicationId "xxx" 
     minSdkVersion 21 
     targetSdkVersion 26 
     versionCode 1 
     versionName "1.0" 
     testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
    } 
    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
     debug { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 

} 

dependencies { 
    implementation fileTree(dir: 'libs', include: ['*.jar']) 
    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { 
     exclude group: 'com.android.support', module: 'support-annotations' 
    }) 
    implementation 'com.android.support:appcompat-v7:26.0.0' 
    implementation 'com.android.support:cardview-v7:26.0.0' 
    implementation 'com.android.support:design:26.0.0' 

    implementation 'org.greenrobot:eventbus:3.0.0' 

    implementation('org.simpleframework:simple-xml:2.7.+') { 
     exclude module: 'stax' 
     exclude module: 'stax-api' 
     exclude module: 'xpp3' 
    } 

    implementation 'com.squareup.okhttp3:okhttp:3.8.1' 

    implementation group: 'commons-codec', name: 'commons-codec', version: '1.10' 
    implementation 'com.google.guava:guava:22.0-android' 
    androidTestCompile 'com.google.guava:guava:22.0-android' 
    testImplementation 'junit:junit:4.12' 
    implementation 'com.android.support.constraint:constraint-layout:1.0.2' 
    implementation 'com.android.support:support-v4:26.0.0' 
} 


configurations.all { 
    resolutionStrategy.force 'com.google.code.findbugs:jsr305:1.3.9' 
} 

Mettre -dontwarn javax.xml.stream.events.** réduit les mises en garde vers le bas à 86, mais je ne suis pas vraiment sûr de savoir comment aborder le reste de leur.

En outre, la ligne "Execution failed for task ':app:transformClassesAndResourcesWithProguardForDebug'. Cette erreur est-elle due aux avertissements ou est-ce quelque chose de complètement différent?

J'apprécierais vraiment toute aide à ce sujet!

acclamations

Mise à jour: Réduit les mises en garde à seulement 8, mis à jour mes règles ProGuard aswell comme les avertissements

Update2: est débarrassé de toutes les mises en garde, mais le apk n'est pas brouillées à Tout, je peux simplement le décompiler avec apktool/dex2jar et voir tout ce qui se passe.

+0

Comment l'utilisation de cette règle PROGUARD pour simplexml: '-dontwarn com.bea.xml.stream . ** -dontwarn org.simpleframework.xml.stream. ** -keep class org.simpleframework.xml. ** {*; } -keepclassmembers, allowobfuscation class * { @ org.simpleframework.xml. * ; @ org.simpleframework.xml. * (...); } ' –

+0

Qui s'est débarrassé des avertissements simpleXML, merci. Im toujours coincé avec "Erreur: Exécution a échoué pour la tâche": app: transformClassesAndResourcesWithProguardForDebug '. " tho. –

+0

De rien. Avez-vous résolu le problème? –

Répondre

0

Voici les règles ProGuard qui peuvent vous aider:

# EventBus 3.0 rules 
# http://greenrobot.org/eventbus/documentation/proguard/ 
-keepattributes *Annotation* 
-keepclassmembers class ** { 
    @org.greenrobot.eventbus.Subscribe <methods>; 
} 
-keep enum org.greenrobot.eventbus.ThreadMode { *; } 

# Only required if you use AsyncExecutor 
-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent { 
    <init>(java.lang.Throwable); 
} 

# SimpleXML proguard 
# Keep public classes and methods. 
-dontwarn com.bea.xml.stream.** 
-dontwarn org.simpleframework.xml.stream.** 
-keep class org.simpleframework.xml.**{ *; } 
-keepclassmembers,allowobfuscation class * { 
    @org.simpleframework.xml.* <fields>; 
    @org.simpleframework.xml.* <init>(...); 
} 

#okhttp3 rules, https://github.com/square/okhttp#proguard 
-dontwarn okio.** 
-dontwarn javax.annotation.Nullable 
-dontwarn javax.annotation.ParametersAreNonnullByDefault 

Pour la old version of Guava:

# Configuration for Guava 18.0 
# 
# disagrees with instructions provided by Guava project: https://code.google.com/p/guava-libraries/wiki/UsingProGuardWithGuava 

-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.base.Joiner { 
    public static com.google.common.base.Joiner on(java.lang.String); 
    public ** join(...); 
} 

-keep class com.google.common.collect.MapMakerInternalMap$ReferenceEntry 
-keep class com.google.common.cache.LocalCache$ReferenceEntry 

# http://stackoverflow.com/questions/9120338/proguard-configuration-for-guava-with-obfuscation-and-optimization 
-dontwarn javax.annotation.** 
-dontwarn javax.inject.** 
-dontwarn sun.misc.Unsafe 

# Guava 19.0 
-dontwarn java.lang.ClassValue 
-dontwarn com.google.j2objc.annotations.Weak 
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement 
+0

Merci, en fait aidé. J'ai toujours le problème que l'apk n'est pas obscurcie du tout. C'est facilement décompilé. –