developer tip

transformClassesAndResourcesWithProguardForRelease FAILED

copycodes 2020. 10. 9. 11:21
반응형

transformClassesAndResourcesWithProguardForRelease FAILED


콘솔에서 Gradle로 Android 애플리케이션을 빌드하려고합니다. 그러나 작업 ': 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 빌드 --stacktrace

이것은 내가받는 예외입니다.

org.gradle.api.tasks.TaskExecutionException: Execution failed for task
':app:transformClassesAndResourcesWithProguardForRelease'.

이 코드를 proGuard 규칙에 추가해보세요.

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

답변은 여기에 게시되었습니다. ': app : transformClassesAndResourcesWithProguardForRelease 작업에 대한 실행 실패


이 코드를 추가 ..your-project/app/proguard-rules.pro

 -ignorewarnings

서명 된 APK가 성공적으로 생성됩니다 ...

업데이트 :

-dontwarn또는 -keep키를 사용하여 경고 메시지를 수정하는 것이 좋습니다 proguard-rules.pro. 왜냐하면 코드에서 자바 리플렉션 을 사용하면 애플리케이션이 충돌하기 때문입니다.


그것은 나를 위해 일했습니다. 또한 pro-gaurd.txt 파일에 다음을 추가해야했습니다.

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

 #### -- OkHttp --

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

 #### -- Apache Commons --

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

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

나는 아무것도 변경하지 않았습니다.

// shrinkResources true
// minifyEnabled true

2 일을 낭비한 후 이미이 문제를 검색 한 proguard 파일을 변경하고 싶지 않습니다.


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

gradle에서 위에서 언급 한 코드를 제거하십시오. 이것은 나를 위해 일했습니다. 이것은 주어진 문제에만 해당됩니다.


react-native-firebase 설치 후 Android에서 릴리스 빌드를 빌드하려고 할 때 동일한 오류 메시지가 나타납니다 .

다음은 내가 따랐던 단계입니다.

  1. react-native-firebase 문서에 언급 된 모든 구성을 수행합니다.
  2. 이 명령을 사용하여 Android 앱 빌드

    ./gradlew assembleRelease

  3. 이 오류 메시지가 있습니다.

실패 : 예외로 인해 빌드가 실패했습니다.

  • 잘못된 점 : ': app : transformClassesAndResourcesWithProguardForRelease'작업에 대한 실행이 실패했습니다.

    작업이 실패했습니다. 자세한 내용은 로그를 참조하세요.

android / app / build.gradle 에서이 코드 줄을 변경하여이 문제를 해결했습니다.

minifyEnabled true

이에

minifyEnabled enableProguardInReleaseBuilds

이것이 내가 한 유일한 변화였습니다. 그것은 나를 위해 작동합니다.


'proguard-rules.pro'에서이 코드를 사용하면 해결 될 수 있습니다.

-keep class * {
public private protected *;
}

또는

-keep class * {*;}
  • 참고 : 위 명령은 난독 처리를 무시합니다.

  • 난독 화 상태를 저장하기 위해 위의 대신 사용할 수 있습니다.

    -keepnames 클래스 * {*;}


Android Studio의 "Build"메뉴에서 "Rebuild Project"를 클릭합니다.


I have struggled with proguard-rules.pro for quite some time and am by no means a pro here! I am posting my file to show that you should not -keep class * without any parameters as this turns off all obfuscation. You can however protect every class that extends from a certain class or any class that implements a certain interface. You can also protect any class that has a constructor having specific elements. Please note that I did not comment every single line as I am not 100% sure of what everything does - it's more like an educated guess. My project includes ksoap2 (okhttp3, okio, XmlPull) that's what many rules are for.

Maybe this can be a starting point for you - you still may need to put some additional rules for your classes in.

-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.** { *; }


add -ignorewarnings in your proguard file and keep only those class that you did not want to obfuscate. Some of the libraries suggest to keep some of their classes if you are using proguard rules. Visit your libraries for details

참고URL : https://stackoverflow.com/questions/41454128/transformclassesandresourceswithproguardforrelease-failed

반응형