Błąd: (26, 0) Nie znaleziono metody Gradle DSL: „runProguard ()”


136

Używam Android Studio 0.9.3 z Gradle 'com.android.tools.build:gradle:0.14.+'

zastosuj wtyczkę: „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.+'
}

Projekt skompilowany wcześniej bez żadnych zmian w tym pliku, otrzymuję: Błąd: (26, 0) Nie znaleziono metody Gradle DSL: 'runProguard ()'

Jak to naprawić?


1
Możesz przeczytać to w celach informacyjnych: tools.android.com/tech-docs/new-build-system . Oświetli te pytania.
Igor Ganapolsky

Odpowiedzi:


97

O ile wiem, runProguardzostał zastąpiony minifyEnabled. Nadal nie jestem pewien, jak zdefiniować konfigurację dla proguard, ale wyszukiwarka Google powinna pomóc ci to sprawdzić.

Edytować:

Do outFileprzeczytania tutaj: https://groups.google.com/forum/#!topic/adt-dev/4_-5NvxuFB0 jak oni to robią.

Krótko mówiąc: używali bardziej złożonej wersji:

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
teraz ma problem z błędem: (32, 0) Nie można znaleźć właściwości „outputFile” na com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@1615795.
NickF,

1
Zgadza się, przeczytaj zmiany w wersji 0.14.0, aby poznać dokładne zmiany tools.android.com/tech-docs/new-build-system
Soham

Edytowałem, aby odzwierciedlić błąd dotyczący outputFile (edycja oczekująca obecnie na recenzję)
RoundSparrow hilltx

1
applicationVariants.all { variant ->
Usunąłem

Mam ten sam problem z inną metodą: Nie znaleziono metody Gradle DSL compileSdkVersion ()
Usman

131

Zamiast używać runProguardw pliku gradle, spróbuj użyć minifyEnabled. To powinno rozwiązać problem. runProguardjest przestarzały i wkrótce przestanie działać.

EDYTOWAĆ

Aby go użyć minifyEnabled, należy zaktualizować gradle do wersji 2.2 lub nowszej.


Błąd jest teraz zmieniony na -> „Nie znaleziono metody Gradle DSL: 'minifyEnable ()'”
shaktiman_droid

czy masz zainstalowany najnowszy system kompilacji Gradle (2.2)?
Varundroid

Otrzymuję ten sam błąd. nie znaleziono minifyEnable. Znalazłeś rozwiązanie?
Henrique

@Varundroid Och, czy to zależy od 2.2? Mam 2.1
shaktiman_droid

6
Powinno być minifyEnabled(nie minifyEnable)
JRomero

112

Może pomóc zmiana w pliku build.gradle aplikacji:

stary:

buildTypes {
    release {

        runProguard false // this line has to be changed

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

Nowy:

buildTypes {
    release {

        minifyEnabled false // new version

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

zrobił to, co sugerowałeś, nadal otrzymując ten sam błąd.
Karan Khurana

26

Jeśli używasz wersji 0.14.0 lub wyższej gradlewtyczki, powinieneś zamienić „ runProguard” na „ minifyEnabled” w swoich build.gradleplikach.

Po prostu dodaj to.

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

minifyEnabled falseOznacza, że ​​nazwy typów kompilacji nie mogą być main ani androidTest (jest to wymuszane przez wtyczkę) i muszą być dla siebie unikalne.

Nowa wersja Gradlewtyczki Androida może automatycznie usuwać nieużywane zasoby. Największą zaletą jest to, że usuwa nieużywane zasoby nie tylko z własnego kodu, ale co ważniejsze z bibliotek , z których korzystasz (np. Tam, gdzie są zasoby do obsługi funkcji, których w rzeczywistości nie używasz w aplikacji).


@GeorgiAngelov Cieszę się, że otrzymałem Twoje komentarze. Miłego kodowania
IntelliJ Amiya

25

Począwszy od wersji Gradle 0.14.4 , błędy te są zgłaszane jako błędy czasu kompilacji.

Więc trzeba wymienić runProguard false/truezminifyEnabled false/true

Zmiany są wymienione na blogu programistów Androida .


21

Migracja projektów Gradle do wersji 1.0.0 wymaga łatwej zmiany nazwy, wszystko jest opisane tutaj: http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0

W przypadku proguard możesz po prostu zmienić nazwę 'runProguard' => 'minifyEnabled', inne patrz poniżej:

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.

Doceniam zarówno dokumentację Androida, jak i to, że je wyróżniasz, ale gdzie znajdziesz wszystko inne, od zipAlign do przodu? Nie ma wzmianki, w których plikach to zostanie znalezione. Nie widzę ich w moim głównym pliku konfiguracyjnym Gradle.
user919426

3

Wynika to z aktualizacji narzędzi gradle dla Androida do wersji 0.14.3. W swoim pliku zamień „build.gradle”

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

przez:

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

Dopóki tego nie naprawią…


1

Nazwa runProguard została zmieniona na minifyEnabled w wersji 0.14.0 (2014/10/31) Gradle.

Aby to naprawić, musisz zmienić runProguard na minifyEnabled w pliku build.gradle projektu.

wprowadź opis obrazu tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.