transformClassesAndResourcesWithProguardForReleaseが失敗しました


83

コンソールで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 build --stacktrace

これは私が受けている例外です:

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

この問題は、アプリのリリース構成でのプロガードの有効化が原因で発生します。したがって、解決策は、プロガードを削除するか、示されたスニペットのコードをリンクreadyandroid.wordpress.com/に
Ready Android

回答:


120

このコードをproGuardルールに追加してみてください。うまくいきました。

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

回答はここに投稿されました: タスクの実行に失敗しました ':app:transformClassesAndResourcesWithProguardForRelease


12
これはうまくいくように見えますが、説明があればいいのですが。
Drew Szurko 2017年

23
ただし、-keep class * {public private *;なので、これは役に立ちません。すべてのクラスが難読化されないようにするため、ここでは役に立たないことが保護されます。
RaghavSharma18年

3
元のクラスとコードを表示した後に逆コンパイルされた私のapkに使用されるコードの上に私のapkを保護しませんか?
Pankaj Talaviya 2018年

29
警告:コードを非公開にしたい場合は、この回答を使用しないでください。
daka

また、これを使用すると、古いバージョンの電話との互換性がなくなります。
赤悪魔

66

このコードをに追加します ..your-project/app/proguard-rules.pro

 -ignorewarnings

あなたの署名されたapkは正常に生成されます...

更新:

それは使用して警告メッセージを修正する方が良いでしょう-dontwarn-keep あなたのキーproguard-rules.pro...あなたは(多分あなたのライブラリ)を使用している場合なので、Javaリフレクションあなたのコード内では、アプリケーションがクラッシュします...


@ Richi、proguard-rules.proファイルがありません。手動で作成する必要がありますか?実行時に生成しているようですrelease { shrinkResources true minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'proguard.cfg' }
AdamHurwitz19年

@AdamHurwitzはい、このファイルを手動で作成する必要があります。
CopsOnRoad

1
私の場合はうまくいきましたが、無関係であると宣言されていると思います。リリースAPKを入手できるかもしれませんが、本当の問題はまだあります。
ドルバーニャ

8

それは私のために働きました私はまた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 *;
}

9
警告:コードを非公開/保護したい場合は、この回答を使用しないでください
Bilal Ahmed

私が理解しているように、「-keep class *」は、基本的にクラスの難読化と削除をオフにします。これを実行したい場合は、build.gradleに簡単に移動し、minifyEnabledをfalseに設定して、proguardFiles行を削除できます。
FrankKrumnow 2018

リリース@FrankKrumnowでミニファイを有効にする方法はありますか?
AdamHurwitz19年

アダム私はプロガードではありません-自分自身をプロにして、それとかなり苦労しています。しかし、そこにある私の新しい投稿を見てください。これには、Androidビューを拡張するクラスなど、特定のクラスグループを保護する方法の例が含まれています。多分これは出発点になることができます。
FrankKrumnow

5

コメントだけで何も変更していません

// shrinkResources true
// minifyEnabled true

2日が無駄になった後、私がすでにこの問題を検索したプロガードファイルを変更したくない


残りの提案はすべて失敗でした、これはうまくいきました。私の場合、サードパーティのライブラリが含まれているため、multidexをオンにし、SDK27にアップグレードする必要がありました。このエラーが突然表示されました。この答えをありがとう!
スティーブンマコーミック

5
minifyEnabledは、コードに対してある種の暗号化を起動します。これを続けないと、ハッカーの作業が簡単になります。プロダクションAPKファイルで無効にすることは非常に危険です!
AdrianGrygutis18年

このソリューションは使用しないでください。それは危険です
ジャック

@Gibsこれにはどのようなリスクがありますか?
BrijeshTanwar18年

@Brijesh Tanwar:暗号化が必要な場合はどうなりますか?
ジャック

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

上記のコードをgradleから削除してください。これは私のために働いた。これは与えられた問題のためだけです。


親愛なるパン。このエラーは、署名されたapkを生成するときに発生しました。私の先輩はgradleでproguardを削除し、次にこのエラーを削除しました
Ayaz Muhammad

言及されているすべての行
Ayaz Muhammad 2018

1

react-native-firebaseをインストールした後、Androidでリリースビルドをビルドしようとしたときに同じエラーメッセージが表示されました。

これらは私が従ったステップです、

  1. 彼らがreact-native-firebaseのドキュメントに記載されているすべての設定を行います。
  2. このコマンドを使用してAndroidアプリをビルドします

    ./gradlew assembleRelease

  3. このエラーメッセージが表示されます。

失敗:ビルドは例外で失敗しました。

  • 何が問題だったのか:タスク ':app:transformClassesAndResourcesWithProguardForRelease'の実行に失敗しました。

    ジョブが失敗しました。詳細についてはログを参照してください

android / app / build.gradleのこのコード行を変更することで、この問題を解決しました

minifyEnabled true

これに

minifyEnabled enableProguardInReleaseBuilds

これが私がした唯一の変更でした。わたしにはできる。



0

'proguard-rules.pro'でこのコードを使用すると解決する可能性があります。

-keep class * {
public private protected *;
}

または

-keep class * {*;}
  • 注:上記のコマンドは難読化を無視します

  • 難読化状態を保存するために、上記の代わりにこれを使用できます

    -keepnamesクラス* {*;}


これは全くProGuardのを取り除くと同じで有する
cesarmax

0

Android Studioで、[ビルド]メニューの[プロジェクトの再構築]をクリックします。


0

私はかなり長い間proguard-rules.proと格闘してきましたが、ここでは決してプロではありません!すべての難読化がオフになるため、パラメータなしでクラス*を保持しないようにファイルを投稿しています。ただし、特定のクラスまたは特定のインターフェイスを実装する任意のクラスから拡張するすべてのクラスを保護できます。特定の要素を持つコンストラクターを持つクラスを保護することもできます。すべてが何をするのか100%確信が持てないので、すべての行にコメントしたわけではないことに注意してください-それは知識に基づいた推測のようなものです。私のプロジェクトには、多くのルールの目的であるksoap2(okhttp3、okio、XmlPull)が含まれています。

たぶん、これはあなたの出発点になるかもしれません-あなたはまだあなたのクラスのためにいくつかの追加のルールを入れる必要があるかもしれません。

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


0

proguardファイルに-ignorewarningsを追加 し、難読化したくないクラスのみを保持します。一部のライブラリは、proguardルールを使用している場合、一部のクラスを保持することを提案しています。詳細については、ライブラリにアクセスしてください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.