Помилка: (26, 0) DSL-метод Gradle не знайдено: 'runProguard ()'


136

Я використовую android studio 0.9.3 з gradle '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) DSL-метод Gradle не знайдено: 'runProguard ()'

Як це виправити?


1
Ви можете прочитати це для довідки: tools.android.com/tech-docs/new-build-system . Це висвітлить такі питання до вас.
ІгорГанапольський

Відповіді:


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) Не вдалося знайти властивість 'outputFile' на com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@1615795.
NickF

1
Це правильно, прочитайте зміни під 0.14.0, щоб знати точні інструменти змін.android.com/tech-docs/new-build-system
Soham

Я відредагував, щоб відобразити помилку щодо outputFile (редагувати зараз очікуваний експертний огляд)
RoundSparrow hilltx

1
Я видалив дублюваний applicationVariants.all { variant ->рядок, але решту прийняв, спасибі
WarrenFaith

У мене однакова проблема з іншим методом: DSL-метод Gradle не знайдено compileSdkVersion ()
Usman

131

Замість використання runProguardу файлі gradle спробуйте використовувати minifyEnabled. Це має вирішити проблему. runProguardзастаріла і незабаром припинить роботу.

EDIT

Для використання minifyEnabledGradle слід оновити до версії 2.2 або вище.


Помилка тепер змінена на -> "Метод DSL Gradle не знайдено: 'minifyEnable ()'"
shaktiman_droid

у вас була встановлена ​​остання система збирання gradle (2.2)?
Варундроїд

Я отримую ту ж помилку. не знайдено minifyEnable. Ви знайшли рішення?
Анріке

@Varundroid О, це залежить від 2,2? У мене 2.1
shaktiman_droid

6
Має бути minifyEnabled(не minifyEnable)
JRomero

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

Якщо ви використовуєте плагін версії 0.14.0 або вище gradle, слід замінити " runProguard" на " minifyEnabled" у своїх build.gradleфайлах.

Просто додайте це.

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

minifyEnabled falseНазви типів нарощування типу не можуть бути основними або androidTest (це виконується плагіном), і вони повинні бути унікальними один для одного.

Нова версія Gradleплагіна Android , може автоматично видаляти невикористані ресурси. Велика виграш тут полягає в тому, що він видаляє невикористані ресурси не лише з власного коду, а ще важливіше з бібліотек, якими ви користуєтесь (наприклад, де є ресурси, які підтримують функції, які ви фактично не використовуєте зі свого додатка).


@GeorgiAngelov Радий отримати ваші коментарі. Щасливе кодування
IntelliJ Amiya


21

Міграція Gradle Projects до версії 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.

Я ціную як андроїд документи, так і ви їх виділяєте, але де ви знайдете все інше, починаючи з zipAlign? Нехтувати зазначенням, у яких файлах це буде знайдено. Я не бачу їх у своєму кореневому файлі config gradle.
user919426

3

Це пов’язано з оновленням інструментів android gradle до 0,14,3. У ваш файл замініть "build.gradle"

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

автор:

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

Поки вони не виправлять це…


1

runProguard було перейменовано на minifyEnabled у версії 0.14.0 (2014/10/31) Gradle.

Щоб виправити це, вам потрібно змінити runProguard на minifyEnabled у файлі build.gradle вашого проекту.

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.