コンソールで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'.
このコードをproGuardのルールに追加してみてください。
-ignorewarnings
-keep class * {
public private *;
}
答えはこちらに投稿されました: タスクの実行に失敗しました ':app:transformClassesAndResourcesWithProguardForRelease
このコードを..your-project/app/proguard-rules.pro
に追加します
-ignorewarnings
あなたの署名付きapkが正常に生成されます...
更新:
-dontwarn
...で-keep
キーまたはproguard-rules.pro
キーを使用して警告メッセージを修正するほうが良いでしょう。コードで(おそらく//ライブラリ)Javaリフレクションを使用すると、アプリケーションがクラッシュするためです。 ..
それは私にとってもうまくいった私もproguard.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'
}
}
あなたの小学校の上記のコードを削除してください。これは私のために働きました。これは与えられた問題のためだけのものです。
インストール後にAndroidでリリースビルドをビルドしようとしたときに同じエラーメッセージが表示されました react-native-firebase 。
これらは私が従ったステップです、
このコマンドを使用してAndroidアプリを構築する
./gradlew assembleRelease
このエラーメッセージを受け取りました。
FAILURE:ビルドは例外で失敗しました。
- 問題点:タスク ':app:transformClassesAndResourcesWithProguardForRelease'の実行に失敗しました。
ジョブが失敗しました。詳細はログを参照してください
このコード行をAndroid/app/build.gradleに変更することで、この問題を解決しました。
minifyEnabled true
これに
minifyEnabled enableProguardInReleaseBuilds
これが私がした唯一の変更点でした。わたしにはできる。
'proguard-rules.pro'でこのコードを使用すると解決する可能性があります。
-keep class * {
public private protected *;
}
または
-keep class * {*;}
注:上記のコマンドは難読化を無視します
難読化状態を保存するために上記の代わりにこれを使用できます
-keepnamesクラス* {*;}
Android Studioでは、[ビルド]メニューの[プロジェクトの再構築]をクリックします。
proguardファイルに- ignorewarningsを追加し、難読化したくないクラスだけを残します。 proguardの規則を使っているなら、いくつかのライブラリはそれらのクラスのいくつかを保持することを提案します。詳しくはあなたの図書館にアクセスしてください
私はかなり長い間proguard-rules.proと戦ってきました、そしてここでは決してプロではありません!私は自分のファイルを投稿していますが、これはすべての難読化を無効にするので、パラメータなしでclass *をキープしないでください。ただし、特定のクラスまたは特定のインターフェースを実装する任意のクラスから拡張されるすべてのクラスを保護することはできます。特定の要素を持つコンストラクタを持つクラスを保護することもできます。私はすべてが何をするのかについて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.** { *; }