transformClassesAndResourcesWithProguardForRelease FAILED

82

Ich versuche, meine Android-Anwendung mit Gradle in der Konsole zu erstellen. Aber unter Fehler bezüglich Aufgabe ': app: transformClassesAndResourcesWithProguardForRelease':

build.gradle:

buildscript {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'
        classpath 'com.google.gms:google-services:3.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

app / build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 24
    buildToolsVersion '24.0.2'
    defaultConfig {
        applicationId "com.XXX.XXX"
        minSdkVersion 14
        targetSdkVersion 24
        versionCode 1
        versionName "0.1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        }
    }
}


dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile('com.squareup.retrofit2:retrofit:2.1.0') {
        exclude module: 'okhttp'
    }
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.android.support:design:24.2.1'
    compile 'com.squareup.okhttp3:okhttp:3.4.1'
    compile 'com.squareup.retrofit2:converter-moshi:2.1.0'
    compile 'moe.banana:moshi-jsonapi:2.2.0'
    compile 'com.squareup.moshi:moshi-adapters:1.3.1'
    compile 'com.google.android.gms:play-services-maps:9.6.0'
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.google.firebase:firebase-core:9.6.0'
    compile 'com.google.firebase:firebase-crash:9.6.0'
    testCompile 'junit:junit:4.12'
}

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

gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

./gradlew build --stacktrace

Dies ist die Ausnahme, die ich erhalte:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task
':app:transformClassesAndResourcesWithProguardForRelease'.
Moe Mirmousavi
quelle
Dieses Problem tritt aufgrund der Pro-Guard-Aktivierung in der Release-Konfiguration der App auf. Die Lösung besteht also entweder darin, Pro-Guard zu entfernen oder den angegebenen Code des Snippets in den Link readyandroid.wordpress.com/…
Ready Android

Antworten:

119

Versuchen Sie, diesen Code zu Ihren proGuard-Regeln hinzuzufügen. Es hat bei mir funktioniert

-ignorewarnings
-keep class * {
    public private *;
}

Die Antwort wurde hier veröffentlicht: Ausführung für Aufgabe fehlgeschlagen ': app: transformClassesAndResourcesWithProguardForRelease

John Spax
quelle
12
Auch wenn dies zu funktionieren scheint, wäre es schön, eine Erklärung zu haben.
Drew Szurko
23
Dies nützt jedoch nichts, da -keep class * {public private *; verhindert, dass alle Ihre Klassen verschleiert werden, und ist daher hier nicht von Nutzen.
Raghav Sharma

3
über Ihrem Code verwendet, um meine apk dekompiliert nach Anzeige der ursprünglichen Klasse und Code nicht meine apk sichern?
Pankaj Talaviya

29
WARNUNG: Verwenden Sie diese Antwort nicht, wenn Sie Ihren Code privat halten möchten.
Daka

Durch diese Verwendung wurde das Gerät auch nicht mit den älteren Telefonversionen kompatibel.
Red-Devil

65

Fügen Sie diesen Code hinzu ..your-project/app/proguard-rules.pro

 -ignorewarnings

deine signierte apk wird erfolgreich generiert ...

Update:

Das ist besser, um Ihre Warnmeldungen mit -dontwarnoder -keep Tasten auf Ihrem proguard-rules.pro... zu korrigieren. Wenn Sie (möglicherweise Ihre Bibliotheken) Java Reflection in Ihrem Code verwenden, stürzt die Anwendung ab ...


@Richi, ich habe keine proguard-rules.pro Datei. Soll ich eine manuell erstellen? Es sieht so aus, als würde ich zur Laufzeit weiter generierenrelease { shrinkResources true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'proguard.cfg' }
Adam Hurwitz

@AdamHurwitz Ja, Sie müssen diese Datei manuell erstellen.
CopsOnRoad

1
Es hat in meinem Fall funktioniert. Aber ich denke, es ist für etwas als irrelevant deklariert. Ich meine, Sie können die Release-Apk bekommen, aber das eigentliche Problem ist immer noch da.
Dorbagna

8

Es hat bei mir funktioniert. Ich musste auch Folgendes in eine pro-gaurd.txt-Datei einfügen

#### -- Picasso --
 -dontwarn com.squareup.picasso.**

 #### -- OkHttp --

 -dontwarn com.squareup.okhttp.internal.**

 #### -- Apache Commons --

 -dontwarn org.apache.commons.logging.**

     -ignorewarnings 
-keep class * {
public private protected *;
}

9
WARNUNG: Bitte verwenden Sie diese Antwort nicht, wenn Sie Ihren Code privat / geschützt halten möchten
Bilal Ahmed

Soweit ich weiß, wird "-keep class *" die Verschleierung und Entfernung von Klassen grundsätzlich deaktivieren. Wenn Sie dies tun möchten, können Sie einfach zu build.gradle gehen und minifyEnabled auf false setzen und die Zeile proguardFiles entfernen.
FrankKrumnow

Gibt es jetzt eine Möglichkeit, Minify in der Version @FrankKrumnow zu aktivieren?
Adam Hurwitz

Adam Ich bin kein Proguard - Pro selbst und kämpfe ziemlich viel damit. Aber bitte schauen Sie sich meinen neuen Beitrag dort unten an. Es enthält Beispiele, wie Sie bestimmte Gruppen von Klassen schützen können - beispielsweise Klassen, die Android-Ansichten erweitern. Vielleicht kann dies ein Ausgangspunkt sein.
FrankKrumnow

5

Ich habe nichts geändert, nur Kommentar

// shrinkResources true
// minifyEnabled true

Sie möchten keine Proguard-Datei ändern, nach der ich bereits nach 2 Tagen gesucht habe


Alle anderen Vorschläge waren gescheitert, dieser hat funktioniert. In meinem Fall musste ich Multidex aufgrund der Aufnahme einer Bibliothek eines Drittanbieters sowie des Upgrades auf SDK 27 aktivieren. Dieser Fehler trat plötzlich auf. Danke für diese Antwort!
Stephen McCormick

5
minifyEnabled startet eine Art Verschlüsselung für Ihren Code. Hacker hat eine einfachere Arbeit, wenn Sie dies nicht beibehalten. Es ist sehr riskant, es in der Production-Apk-Datei zu deaktivieren!
Adrian Grygutis

Verwenden Sie diese Lösung nicht. Es ist riskant
Jack

@ Gibs welches Risiko dabei?
Brijesh Tanwar

@Brijesh Tanwar: Was ist, wenn ich Verschlüsselung brauche?
Jack

3
buildTypes {
    release {
        shrinkResources true
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
    }
}

Bitte entfernen Sie den oben genannten Code in Ihrem Gradle. Das hat bei mir funktioniert. Dies ist nur für gegebenes Problem.


Lieber Pang. Dieser Fehler trat auf, als ich signierte apk generiere. Mein Senior entfernen Proguard in Gradle dann diesen Fehler entfernt
Ayaz Muhammad

alle Zeilen, die erwähnt werden
Ayaz Muhammad

1

Ich habe die gleiche Fehlermeldung erhalten, als ich versucht habe, ein Release Build in Android nach der Installation von react-native-firebase zu erstellen .

Dies sind die Schritte, denen ich gefolgt bin,

  1. Führen Sie alle Konfigurationen aus, die in der Dokumentation zu react-native-firebase erwähnt werden.
  2. Erstellen Sie mit diesem Befehl eine Android-App

    ./gradlew assembleRelease

  3. Ich habe diese Fehlermeldung erhalten.

FAILURE: Build mit einer Ausnahme fehlgeschlagen.

  • Was schief gelaufen ist: Ausführung für Aufgabe ': app: transformClassesAndResourcesWithProguardForRelease' fehlgeschlagen.

    Job fehlgeschlagen, Details finden Sie in den Protokollen

Dieses Problem wurde behoben, indem diese Codezeile in android / app / build.gradle geändert wurde

minifyEnabled true

dazu

minifyEnabled enableProguardInReleaseBuilds

Dies war die einzige Änderung, die ich vorgenommen habe. Für mich geht das.



0

Verwenden Sie diesen Code in 'proguard-rules.pro' möglicherweise aufgelöst.

-keep class * {
public private protected *;
}

oder

-keep class * {*;}
  • Hinweis: Die obigen Befehle ignorieren Verschleierungen

  • kann dies stattdessen oben zum Speichern des verschleierten Zustands verwenden

    -keepnames class * {*;}

Cesarmax
Dies zu haben ist dasselbe wie Proguard überhaupt zu entfernen
Cesarmax
0

Klicken Sie in Android Studio im Menü "Erstellen" auf "Projekt neu erstellen".

Niclin
quelle
0

Ich habe seit einiger Zeit mit proguard-rules.pro zu kämpfen und bin hier keineswegs ein Profi! Ich poste meine Datei, um zu zeigen, dass Sie die Klasse * nicht ohne Parameter beibehalten sollten, da dies jede Verschleierung ausschaltet. Sie können jedoch jede Klasse, die sich von einer bestimmten Klasse erstreckt, oder jede Klasse, die eine bestimmte Schnittstelle implementiert, schützen. Sie können auch jede Klasse schützen, die einen Konstruktor mit bestimmten Elementen hat. Bitte beachten Sie, dass ich nicht jede einzelne Zeile kommentiert habe, da ich nicht 100% sicher bin, was alles funktioniert - es ist eher eine fundierte Vermutung. Mein Projekt beinhaltet ksoap2 (okhttp3, okio, XmlPull), dafür gibt es viele Regeln.

Vielleicht kann dies ein Ausgangspunkt für Sie sein - möglicherweise müssen Sie noch einige zusätzliche Regeln für Ihren Unterricht festlegen.

-android
-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable

-keep public class * extends android.app.Activity
-keepclasseswithmembers class * extends com.way4net.oner.lifa.plugin.ThemedFragment
-keepclasseswithmembers class * extends com.way4net.oner.lifa.plugin.ThemedActivity
-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
-keepattributes Signature #there were 1 classes trying to access generic signatures using reflection emfehlung von proguard selbst

-keep public class * extends android.view.View {
      public <init>(android.content.Context);
      public <init>(android.content.Context, android.util.AttributeSet);
      public <init>(android.content.Context, android.util.AttributeSet, int);
      public void set*(...);
}

-keepclasseswithmembers class * {
     public <init>(android.content.Context, android.util.AttributeSet);
 }

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.content.Context {
    public void *(android.view.View);
    public void *(android.view.MenuItem);
}

-keepclassmembers class * implements android.os.Parcelable {
    static ** CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn android.support.v4.**
#-dontwarn javax.annotation.**
#-dontwarn org.xmlpull.v1.**
-dontnote android.net.http.*
-dontnote org.apache.commons.codec.**
-dontnote org.apache.http.**
-dontnote okhttp3.**
-dontnote org.kobjects.util.**
-dontnote org.xmlpull.v1.**
-keep class okhttp3.** {
      *;
 }

-keep class org.xmlpull.v1.XmlSerializer {
    *;
}
-keep class org.xmlpull.v1.XmlPullParser{
    *;
}
-dontwarn org.xmlpull.v1.XmlPullParser

-keep class org.xmlpull.v1.XmlSerializer {
    *;
}
-dontwarn org.xmlpull.v1.XmlSerializer

-keep class org.kobjects.** { *; }
-keep class org.ksoap2.** { *; }
-keep class okio.** { *; }
-keep class org.kxml2.** { *; }
-keep class org.xmlpull.** { *; }

FrankKrumnow
quelle
0

hinzufügen -ignorewarnings in Ihrer proguard Datei und halten nur jene Klasse , dass Sie nicht verschleiern wollte. Einige Bibliotheken schlagen vor, einige ihrer Klassen beizubehalten, wenn Sie Proguard-Regeln verwenden. Besuchen Sie Ihre Bibliotheken für Details

user3135923
quelle