任务执行失败':app:transformClassesAndResourcesWithProguardForRelease' Android的

时间:2017-01-02 18:16:06

标签: android gradle proguard

我正在Android中构建一个应用程序,这是build.gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.1"
    defaultConfig {
        applicationId "myApp"
        minSdkVersion 21
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
        packagingOptions {
            exclude 'META-INF/DEPENDENCIES.txt'
            exclude 'META-INF/LICENSE.txt'
            exclude 'META-INF/NOTICE.txt'
            exclude 'META-INF/NOTICE'
            exclude 'META-INF/LICENSE'
            exclude 'META-INF/DEPENDENCIES'
            exclude 'META-INF/notice.txt'
            exclude 'META-INF/license.txt'
            exclude 'META-INF/dependencies.txt'
            exclude 'META-INF/LGPL2.1'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile project(':geth')
    compile 'com.android.volley:volley:1.0.0'
    compile 'com.google.android.gms:play-services-maps:10.0.1'
    compile 'com.android.support:appcompat-v7:25.1.0'
    compile 'com.android.support:support-v4:25.1.0'
    compile 'com.android.support:design:25.1.0'
    compile 'com.android.support:multidex:1.0.1'
    compile 'org.web3j:core-android:1.1.0'
    testCompile 'junit:junit:4.12'
}

当我尝试构建我的应用时,我收到以下警告,导致构建失败:

http://pastebin.com/EhMr66Yg

我应该为这些警告添加-dontwarn规则吗?是什么导致他们?

由于67个警告或最后一个警告,构建是否失败:

"有1个未解析的对库类成员的引用。          您可能需要更新库版本。"

感谢。

3 个答案:

答案 0 :(得分:1)

问题在于Proguard的链接问题。 ProGuard优化字节码,删除未使用的代码指令,并使用短名称对剩余的类,字段和方法进行模糊处理。混淆的代码使您的APK难以进行逆向工程,这在您的应用使用安全敏感功能时尤为重要

有关proguard的更多信息,请点击此处: https://jsfiddle.net/767psdwt

build.gradle中使用的每个库的proguard特定规则应放在“proguard-rules.pro”文件中,如屏幕截图所示。

https://developer.android.com/studio/build/shrink-code.html

注意:可以更改proguard文件。

遵守要写的规则。

-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }
-keep class com.android.volley.** { *; }
-keep interface com.android.volley.** { *; }
-keep class org.apache.commons.logging.**
-keepattributes *Annotation*

-dontwarn org.apache.**

-keepattributes Annotation,EnclosingMethod,Signature
-keepnames class com.fasterxml.jackson.* { ; }
-dontwarn com.fasterxml.jackson.databind.
-keep class org.codehaus.* { ; }
-keepclassmembers public final enum org.codehaus.jackson.annotate.JsonAutoDetect$Visibility {
public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; }
-keep public class your.class.* {
public void set_(_);
public ** get*();
}

注意:有关其他库程序规则,请使用enter image description here

答案 1 :(得分:0)

这不是一个问题。这些问题是由ProGuard引起的。您需要修复ProGuard配置文件。

请参阅以下链接以获取更多帮助:

http://proguard.sourceforge.net/manual/troubleshooting.html

Using ProGuard with Android

答案 2 :(得分:0)

你必须使用以下内容。

-dontwarn com.squareup.**
-dontwarn com.fasterxml.**

以及导致警告的类。这些类可能是自我混淆的,所以你不需要对它们进行保护。希望这对你有用。