错误:(26,0)未找到Gradle DSL方法:“ runProguard()”


136

我正在使用gradle的android studio 0.9.3 'com.android.tools.build:gradle:0.14.+'

应用插件:“ com.android.application”

android {
    compileSdkVersion 19
    buildToolsVersion '20.0.0'

    defaultConfig {
        applicationId "xxx.xxx.xxx"
        minSdkVersion 16
        targetSdkVersion 19
        versionCode 1
        versionName "1.0.11"
    }

    signingConfigs{
        releaseConfig{
            storeFile file("xxxxxxx")
            storePassword = "xxxx"
            keyAlias = "xxxx"
            keyPassword = "xxxx"
        }
    }

    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.releaseConfig

            // adds version to file name
            applicationVariants.all { variant ->
                def file = variant.outputFile
                variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
            }
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    // You must install or update the Support Repository through the SDK manager to use this dependency.
    // You must install or update the Support Repository through the SDK manager to use this dependency.
    // You must install or update the Google Repository through the SDK manager to use this dependency.
    // You must install or update the Support Repository through the SDK manager to use this dependency.
    compile 'com.android.support:support-v4:19.+'
    compile 'com.android.support:appcompat-v7:19.+'
    compile 'com.mcxiaoke.volley:library:1.0.6'
    compile 'com.google.code.gson:gson:2.2.+'
}

之前在该文件中没有任何更改的情况下编译的项目,我得到: 错误:(26,0)未找到Gradle DSL方法:“ runProguard()”

如何解决?


1
您可以阅读以下内容以供参考:tools.android.com/tech-docs/new-build-system。它将为您阐明这些问题。
IgorGanapolsky

Answers:


97

据我所知runProguard被替换为minifyEnabled。我仍然不确定如何为proguard定义配置,但是Google搜索应该可以帮助您找到答案。

编辑:

对于outFile在这里阅读:https://groups.google.com/forum/#!topic/adt-dev/4_-5NvxuFB0他们是如何做到这一点。

简而言之:他们使用了更复杂的版本:

applicationVariants.all { variant ->

    variant.outputs.each { output ->

        def apk = output.outputFile;
        def newName;

        // newName = apk.name.replace(".apk", "-v" + defaultConfig.versionName + "-" + variant.buildType.name.toUpperCase() + ".apk");
        if (variant.buildType.name == "release") {
            newName = apk.name.replace(".apk", "-v" + defaultConfig.versionName + "-release.apk");
        } else {
            newName = apk.name.replace(".apk", "-v" + defaultConfig.versionName + "-beta.apk");
        }

        output.outputFile = new File(apk.parentFile, newName);

        if (output.zipAlign) {
            output.outputFile = new File(apk.parentFile, newName.replace("-unaligned", ""));
        }

        logger.info('INFO: Set outputFile to ' + output.outputFile + " for [" + output.name + "]");
    }
}

1
现在它有问题,错误:(32,0)在com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@1615795上找不到属性'outputFile'。
NickF

1
没错,请阅读0.14.0下的更改,以了解确切的更改tools.android.com/tech-docs/new-build-system
Soham

我进行编辑以反映有关outputFile的错误(编辑当前正在等待同行审阅)
RoundSparrow hilltx 2015年

1
我已删除了重复的applicationVariants.all { variant ->行,但接受了其余的行,谢谢
WarrenFaith 2015年

我使用不同的方法遇到相同的问题:未找到Gradle DSL方法compileSdkVersion()
Usman

131

而不是runProguard在gradle文件中使用,请尝试使用minifyEnabled。这应该可以解决问题。runProguard已弃用,不久将停止工作。

编辑

要使用minifyEnabled,gradle应该更新到2.2或更高版本。


错误现在更改为->“找不到Gradle DSL方法:'minifyEnable()'”
shaktiman_droid 2014年

您是否安装了最新的gradle构建系统(2.2)?
Varundroid 2014年

我遇到了同样的错误。未找到minifyEnable。您找到解决方案了吗?
Henrique 2014年

@Varundroid哦,它取决于2.2吗?我有2.1
shaktiman_droid 2014年

6
应该是minifyEnabled(不是minifyEnable
JRomero 2014年

112

应用程序build.gradle文件中的更改可能会有所帮助:

旧:

buildTypes {
    release {

        runProguard false // this line has to be changed

        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

新:

buildTypes {
    release {

        minifyEnabled false // new version

        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

做了你建议仍然得到同样的错误。
卡兰·库拉纳

26

如果您使用的gradle插件版本为0.14.0或更高版本,则应在文件中将runProguardminifyEnabled” 替换为“ ” build.gradle

只需添加。

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

minifyEnabled false意味着构建类型名称不能为main或androidTest(由插件强制执行),并且它们必须彼此唯一。

新版本的Android Gradle插件可以自动删除未使用的资源。这样做的最大好处是,它不仅可以从您自己的代码中删除未使用的资源,而且更重要的是从您正在使用的库中删除未使用的资源(例如,其中包含的资源可以支持您实际上并未从应用程序中使用的功能)。


@GeorgiAngelov很高兴收到您的评论。快乐的编码
IntelliJ Amiya 2015年

25

Gradle 0.14.4开始,这些错误被报告为编译时错误。

所以你必须更换 runProguard false/trueminifyEnabled false/true

所做的更改已在Android开发者博客中列出。


21

将Gradle项目迁移到1.0.0版需要一些简单的重命名工作,此处介绍了所有内容:http : //tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0

对于proguard,您可以简单地将'runProguard'=>'minifyEnabled'重命名,其他请参见以下内容:

Renamed Properties in BuildTypes:    
runProguard => minifyEnabled
zipAlign => zipAlignEnabled
jniDebugBuild => jniDebuggable
renderscriptDebug => renderscriptDebuggable

Renamed Properties in ProductFlavors:    
flavorGroups => flavorDimensions
packageName => applicationId
testPackageName => testApplicationId
renderscriptSupportMode => renderscriptSupportModeEnabled
ProductFlavor.renderscriptNdkMode => renderscriptNdkModeEnabled
Other Name changes

InstrumentTest was renamed to androidTest.

我对Android文档以及您突出显示的文档都表示赞赏,但是从zipAlign以后,您还能从哪里找到其他内容?忽略了在哪个文件中找到该文件。我在根gradle配置文件中看不到它们。
user919426 2014年

3

这是由于gradle android工具已更新为0.14.3。放入文件“ build.gradle”中替换

classpath 'com.android.tools.build:gradle:0.14.+'

通过:

classpath 'com.android.tools.build:gradle:0.14.2'

直到他们解决了…


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.