Lỗi: (26, 0) Không tìm thấy phương thức DSL cấp: 'runProguard ()'


136

Tôi đang sử dụng android studio 0.9.3 với gradle 'com.android.tools.build:gradle:0.14.+'

áp dụng plugin: '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.+'
}

Dự án được biên dịch trước mà không có bất kỳ thay đổi nào trong tệp đó, tôi nhận được: Lỗi: (26, 0) Không tìm thấy phương thức DSL cấp: 'runProguard ()'

Làm thế nào để khắc phục điều đó?


1
Bạn có thể đọc phần này để tham khảo: tools.android.com/tech-docs/new-build-system . Nó sẽ chiếu sáng những câu hỏi như vậy cho bạn.
IgorGanapolsky

Câu trả lời:


97

Theo như tôi biết runProguardđã được thay thế bằng minifyEnabled. Tôi vẫn không chắc chắn làm thế nào để xác định cấu hình cho proguard nhưng một tìm kiếm Google sẽ giúp bạn tìm ra.

Biên tập:

Để outFileđọc tại đây: https://groups.google.com/forum/#!topic/adt-dev/4_-5NvxuFB0 cách họ làm điều đó.

Nói tóm lại: họ đã sử dụng một phiên bản phức tạp hơn:

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
bây giờ nó có vấn đề với Lỗi: (32, 0) Không thể tìm thấy thuộc tính 'outputFile' trên com.android.build.gradle.i INTERNal.api.ApplicationVariantImpl_Decorated@1615795.
NickF

1
Điều đó là chính xác, hãy đọc các thay đổi dưới 0.14.0 để biết các công cụ thay đổi chính xác.android.com/tech
Soham

Tôi đã chỉnh sửa để phản ánh lỗi về outputFile (chỉnh sửa hiện đang chờ đánh giá ngang hàng)
RoundSparrow hilltx 8/1/2015

1
Tôi đã xóa applicationVariants.all { variant ->dòng trùng lặp nhưng chấp nhận phần còn lại, cảm ơn
WarrenFaith

Tôi có cùng một vấn đề với phương pháp khác nhau: Không tìm thấy phương thức DSL cấp biên dịchSdkVersion ()
Usman

131

Thay vì sử dụng runProguardtrong tập tin gradle của bạn, hãy thử sử dụng minifyEnabled. Điều này sẽ khắc phục vấn đề. runProguardkhông được chấp nhận và sớm ngừng hoạt động.

BIÊN TẬP

Để sử dụng minifyEnabled, gradle cần được cập nhật lên phiên bản 2.2 hoặc cao hơn.


Lỗi hiện được thay đổi thành -> "Không tìm thấy phương thức DSL cấp: 'minifyEnable ()'"
shaktiman_droid

bạn đã cài đặt hệ thống xây dựng lớp mới nhất (2.2) chưa?
Varundroid

Tôi đang nhận được cùng một lỗi. không tìm thấy minifyEnable. Bạn đã tìm thấy một giải pháp?
Henrique

@Varundroid Oh có phụ thuộc vào 2.2 không? Tôi có 2.1
shaktiman_droid

6
Nên minifyEnabled(không minifyEnable)
JRomero

112

Thay đổi trong tệp build.gradle ứng dụng có thể giúp:

cũ:

buildTypes {
    release {

        runProguard false // this line has to be changed

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

Mới:

buildTypes {
    release {

        minifyEnabled false // new version

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

đã làm những gì bạn đề nghị vẫn nhận được cùng một lỗi.
Karan Khurana

26

Nếu bạn đang sử dụng phiên bản 0.14.0 trở lên của gradleplugin, bạn nên thay thế " runProguard" bằng " minifyEnabled" trong các build.gradletệp của mình .

Chỉ cần thêm điều này.

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

minifyEnabled falseTên phương tiện Build Type không thể là chính hoặc androidTest (điều này được thi hành bởi plugin) và chúng phải là duy nhất cho nhau.

Phiên bản mới của Gradleplugin Android , có thể tự động xóa các tài nguyên không sử dụng. Chiến thắng lớn ở đây là nó loại bỏ các tài nguyên không sử dụng không chỉ từ mã của riêng bạn, mà quan trọng hơn là từ các thư viện bạn đang sử dụng (ví dụ: có tài nguyên đi kèm để hỗ trợ các tính năng mà bạn không thực sự sử dụng từ ứng dụng của mình).


@GeorgiAngelov Rất vui khi nhận được ý kiến ​​của bạn. Chúc mừng mã hóa
IntelliJ Amiya 10/2/2015

25

Kể từ lớp 0.14.4 , các lỗi này được báo cáo là lỗi thời gian biên dịch.

Vì vậy, bạn phải thay thế runProguard false/truebằngminifyEnabled false/true

Những thay đổi được liệt kê trên Blog của nhà phát triển Android .


21

Di chuyển Dự án Gradle sang phiên bản 1.0.0 cần một số công việc đổi tên dễ dàng, mọi thứ được mô tả ở đây: http://tools.android.com/tech-docs/new-build-system/migrating-to-1-0-0

Đối với proguard, bạn có thể chỉ cần đổi tên 'runProguard' => 'minifyEnables', cho những người khác xem bên dưới:

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.

Tôi đánh giá cao cả tài liệu Android cũng như bạn làm nổi bật chúng, nhưng bạn tìm thấy mọi thứ khác từ zipAlign ở đâu? Có bỏ qua đề cập đến những tập tin này sẽ được tìm thấy. Tôi không thấy chúng trong tập tin cấu hình gradle gốc của tôi.
dùng919426

3

Điều này là do việc cập nhật các công cụ Android gradle lên 0.14.3. Vào tập tin của bạn "build.gradle" thay thế

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

bởi:

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

Cho đến khi họ sửa nó


1

runProguard đã được đổi tên thành minifyEnables trong phiên bản 0.14.0 (2014/10/31) của Gradle.

Để khắc phục điều này, bạn cần thay đổi runProguard thành minifyEnables trong tệp build.gradle của dự án của bạn.

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.