Android 激活proguard时Gradle无法生成

Android 激活proguard时Gradle无法生成,android,gradle,proguard,Android,Gradle,Proguard,我正试图用Gradle发布我的Android应用程序 一切正常,包括/gradlew clean build assembleerelease命令 然而,只要我尝试使用proguard,Gradle就无法构建发布版本 以下是我得到的错误(堆栈跟踪已激活): 这是我的gradle文件: buildscript { repositories { mavenCentral() } dependencies { classpath 'com.an

我正试图用Gradle发布我的Android应用程序

一切正常,包括
/gradlew clean build assembleerelease
命令

然而,只要我尝试使用proguard,Gradle就无法构建发布版本

以下是我得到的错误(堆栈跟踪已激活):

这是我的gradle文件:

buildscript {
    repositories {
        mavenCentral()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
    maven {
        url 'http://www.bugsense.com/gradle/'
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')

    compile 'com.google.guava:guava:14.+'
    compile 'com.google.code.gson:gson:2.+'
    compile 'org.zeroturnaround:zt-zip:1.+'
    compile 'com.github.japgolly.android:svg-android:2.+'
    compile('de.keyboardsurfer.android.widget:crouton:1.8.1') {
        exclude module: 'support-v4'
        compile 'com.android.support:support-v4:18.+'
    }
    compile 'com.squareup:otto:1.3.4'
    compile 'com.squareup.okhttp:okhttp:1.2.+'
    compile 'com.squareup.picasso:picasso:1+'
    compile 'com.bugsense.trace:bugsense:3.5'

    //Google Drive SDK
    compile 'com.google.android.gms:play-services:3.+'
    compile 'com.google.apis:google-api-services-drive:v2+'

    compile('com.google.api-client:google-api-client:1.+') {
        exclude(group: 'xpp3', module: 'xpp3')
        exclude(group: 'org.apache.httpcomponents', module: 'httpclient')
        exclude(group: 'junit', module: 'junit')
        exclude(group: 'com.google.android', module: 'android')
    }
    compile('com.google.api-client:google-api-client-android:1.+') {
        exclude group: 'xpp3'
        exclude group: 'com.google.android.google-play-services'
    }
    compile('com.google.http-client:google-http-client-jackson:1.+') {
        exclude group: 'xpp3'
    }
    compile('com.google.http-client:google-http-client-gson:1.+') {
        exclude group: 'xpp3'
    }

    compile 'com.google.apis:google-api-services-plus:v1+'

    compile 'com.netflix.rxjava:rxjava-android:+'

    compile('com.github.frankiesardo:icepick:2+') {
        exclude module: 'support-v4'
        compile 'com.android.support:support-v4:18.+'
    }

//    compile (group: 'com.google.apis', name: 'google-api-services-youtube', version: 'v3-rev56-1.15.0-rc')
}

android {
    compileSdkVersion 18
    buildToolsVersion "18.0.1"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 18
    }
    signingConfigs {
        release {
                    storeFile file('path_to_file')
                    storePassword '***'
                    keyAlias '***'
                    keyPassword '***'
                }
    }

    buildTypes
            {
                release {
                    runProguard true
                    proguardFile getDefaultProguardFile('proguard-android.txt')
                    proguardFile 'proguard-project.txt'
                    signingConfig signingConfigs.release 
               }
            }
}
有人知道问题是什么吗

问候


编辑:
/gradlew clean assembleDebug
工作完美!如果runProguard设置为off,则
/gradlew clean build AssemblerEase
可以工作。所以这是一个100%的进度问题。

嗯,我不明白为什么,但如果我用相同的参数(进度…)启动两次相同的任务,第二次是好的

但是如果第二个参数改变,任务就会失败

希望它能帮助别人


在过去的几个小时里,我一直在为这个问题争论不休。基本上,如果出现任何警告,proguard任务将停止执行。通过将
-d
添加到构建中(如:
gradle clean assembleerelease-d
),可以看到Proguard警告和stacktrace。请注意,stacktrace提到“请先更正上述警告。”

为了使构建能够通过proguard,我不得不将它抱怨的包的
-dontwarn
条目添加到我的
proguard project.txt
文件中。大致如下:

-dontwarn org.apache.lang.**
…等等

简单地说。。。按照stacktrace的指示执行。修复警告!:)


顺便说一句,我很抱歉,因为我现在认识到原来帖子中的stacktrace与我遇到的不太一样。不过,我确实觉得我的答案很有帮助,因为很明显,我在这里试图搜索我的问题的答案。

检查您的minifyEnabled内置渐变是否设置为“false”。因为当它为“true”时,调试器在生成带签名的apk时将给出一个错误。

您可以在proguard-project.txt上使用-ignorewarnings,这样您就不需要指定每个包。

我实际上在proguard上遇到了问题,多亏了你的代码片段,我才将proguard-project.txt添加到build.gradle中,这就解决了我的问题。我希望android gradle文档在示例中有它。为什么在构建文件中有两次mavenCentral()?一次用于插件,一个用于依赖项。对于其他有相同问题的人:确保复制上述版本构建类型-尤其是关于proguard文件,并确保在模块目录中包含该proguard-project.txt,并在其中包含答案中的行。我在这方面犯了一个错误,我想知道,为什么-dontwarn语句没有做任何事情…是的,对我来说,同样的事情…这应该是解决方案,而不是上面的那个。这些可以放在proguard-project.txt文件中,只需将其添加到发布部分的文件中即可。我的看起来像:-dontwarn android.webkit.*-dontwarn org.apache.*-dontwarn com.newrelic.**不错。:)谢谢!我已经实现了“Samsung Pass SDK”,所以我必须添加-dontwarn com.Samsung.*以防其他人在那里苦苦挣扎。我认为这是我需要的解决方案,任何我如何实现-dontwarn org.apache.lang的例子?是在proguard project.txt之后在gradle上吗?签名的APK对调试没有问题。但是如果你没有
minifyEnabled
,那么你很快就需要
multiDexEnabled
——这比Proguard更痛苦。当使用rxjava、retrolambda和kotlin以及其他依赖项时,Multidex比Proguard所能做的工作要少得多(只需要几处更改)。。。把它放在外面。话虽如此,我们两者都用。如果您关心应用程序的安全性,并且出于性能原因希望删除日志语句,那么Proguard对于发布版本非常重要。我花了数周的时间研究Proguard的问题,而切换到multidex实际上需要10分钟的时间。“请帮助”将被拒绝。这可防止混淆。这不是解决办法。
-dontwarn org.apache.lang.**