使用"没有方法签名的构建gradle失败....适用于参数类型:(java.lang.String)值"

时间:2017-06-13 15:19:27

标签: android gradle android-gradle

我有4个gradle构建文件:当我在android studio中构建时,我经常遇到错误:

  

没有方法签名:   org.gradle.model.ModelMap.getDefaultProguardFile()适用于   参数类型:(java.lang.String)值:[proguard-android.txt]

档案1

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.9.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

文件2

apply plugin: 'com.android.model.native'

model {
    android {
        compileSdkVersion = 25
        buildToolsVersion = '25.0.0'

        defaultConfig {
            minSdkVersion.apiLevel = 17
            targetSdkVersion.apiLevel = 25
            versionCode = 1
            versionName = '1.0'
        }
        ndk {
            moduleName = 'fpextractor'
            platformVersion = 17
            toolchain  = "clang"
            stl        = 'gnustl_static'   //std::mutex not in gnustl_static
            cppFlags.add('-std=c++11')
            abiFilters.addAll(['armeabi', 'armeabi-v7a', 'x86'])
            //abiFilters.addAll(['armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64']) //this is default
            //abiFilters.addAll(['armeabi'])
            ldLibs.addAll(['android', 'log', 'atomic', 'z'])
        }
    }
}

// This is just copy out the header file and built lib into distribution
// directory for clint application to use; it is a small overhead of this sample:
//    both lib and app are put inside one project space [save maintenance time]
task(distributeLib, type : Copy) {
    // trigger build library
    dependsOn assemble
    into '../distribution/fpextractor/'
    from('src/main/jni/fp_extractor.h') {
        into 'include/'
    }
    from('build/outputs/native/release/lib') {
        into 'lib/'
    }
}

文件3

apply plugin: 'com.android.model.native'

model {
    android {
        compileSdkVersion = 25
        buildToolsVersion = '25.0.0'

        defaultConfig {
            minSdkVersion.apiLevel = 17
            targetSdkVersion.apiLevel = 25
            versionCode = 1
            versionName = '1.0'
        }
        ndk {
            moduleName = 'nativeaudio'
            platformVersion = 17
            toolchain  = "clang"
            stl        = 'gnustl_static'   //std::mutex not in gnustl_static
            cppFlags.add('-std=c++11')
            abiFilters.addAll(['armeabi', 'armeabi-v7a', 'x86'])
            //abiFilters.addAll(['armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64', 'mips', 'mips64']) //this is default
            //abiFilters.addAll(['armeabi-v7a'])
            ldLibs.addAll(['android', 'log', 'OpenSLES', 'atomic'])
        }
    }
}

// This is just copy out the header file and built lib into distribution
// directory for clint application to use; it is a small overhead of this sample:
//    both lib and app are put inside one project space [save maintenance time]
task(distributeLib, type : Copy) {
    // trigger build library
    dependsOn assemble
    into '../distribution/nativeaudio/'
    from('src/main/jni/buf_manager.h') {
        into 'include/'
    }
    from('src/main/jni/android_debug.h') {
        into 'include/'
    }
    from('src/main/jni/debug_utils.h') {
        into 'include/'
    }
    from('src/main/jni/audio_common.h') {
        into 'include/'
    }
    from('src/main/jni/audio_recorder.h') {
        into 'include/'
    }
    from('build/outputs/native/release/lib') {
        into 'lib/'
    }
}

档案4

apply plugin: 'com.android.model.application'

// Root of 3rd party lib(s): location could be anywhere on the host system
def lib_distribution_root = '../distribution'
model {
    repositories {
        libs(PrebuiltLibraries) {
            // Configure one pre-built lib: shared
            nativeaudio {
                // Inform Android Studio where header file dir for this lib
                headers.srcDir "${lib_distribution_root}/nativeaudio/include"
                // Inform Android Studio where lib is -- each ABI should have a lib file
                binaries.withType(SharedLibraryBinary) {
                    sharedLibraryFile = file("${lib_distribution_root}/nativeaudio/lib/${targetPlatform.getName()}/libnativeaudio.so")
                }
            }
            fpextractor {
                // Inform Android Studio where header file dir for this lib
                headers.srcDir "${lib_distribution_root}/fpextractor/include"
                // Inform Android Studio where lib is -- each ABI should have a lib file
                binaries.withType(SharedLibraryBinary) {
                    sharedLibraryFile = file("${lib_distribution_root}/fpextractor/lib/${targetPlatform.getName()}/libfpextractor.so")
                }
            }
            // Configure another pre-built lib: shared;[change to static after Studio supports]
            // static lib generation. USING static lib is supported NOW, for that case,
            // simple change:
            //  SharedLibaryBinary --> StaticLibraryBinary
            //  sharedLibraryFile  --> staticLibraryFile
            //  *.so --> *.a
            //gperf {
            //    headers.srcDir "${lib_distribution_root}/gperf/include"
            //    binaries.withType(SharedLibraryBinary) {
            //        sharedLibraryFile = file("${lib_distribution_root}/gperf/lib/${targetPlatform.getName()}/libgperf.so")
            //    }
            //}
        }
    }
    android {
        compileSdkVersion = 25
        buildToolsVersion = '25.0.0'

        defaultConfig {
            applicationId='com.gfk.mediawatchapp'
            minSdkVersion.apiLevel = 17
            targetSdkVersion.apiLevel = 25
            versionCode = 22
            versionName = '255.0.4'
            // Enabling multidex support.
            //multiDexEnabled true
        }
        ndk {
            platformVersion = 17
            moduleName = 'mwlib'
            toolchain  = "clang"
            stl        = 'gnustl_static'
            cppFlags.add('-std=c++11')
            ldLibs.addAll(['android', 'log', 'OpenSLES', 'atomic'])
            //build a default combined apk including all ABIs.
            //abiFilters.addAll(['armeabi-v7a'])
            abiFilters.addAll(['armeabi', 'armeabi-v7a', 'x86']) //this is default
        }
        sources {
            main {
                jni {
                    dependencies {
                        library 'nativeaudio' linkage 'shared'
                        library 'fpextractor' linkage 'shared'
                        // if gperf were *.a, change shared --> static
                        //library 'gperf' linkage 'shared'
                    }
                }
                jniLibs {
                    // for shared lib, lib need to be pushed to the target too
                    // Once libs are copied into app/src/main/jniLibs directory,
                    // Android Studio will pack them into APK's lib/ directory
                    // Here we like to avoid another duplication by pointing
                    // to the files that containing our libs' distribution location
                    // so the same file is used by compiler at host, also packed
                    // into APk to be used at Target (phone/tablet)
                    source {
                        srcDir "${lib_distribution_root}/nativeaudio/lib"
                        srcDir "${lib_distribution_root}/fpextractor/lib"
                        //srcDir "${lib_distribution_root}/gperf/lib"
                    }
                }
            }
        }
        buildTypes {
            release {
                minifyEnabled true
                shrinkResources true
                proguardFiles.add(file('proguard-android.txt'))
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
}

dependencies {
    println rootProject.getName()
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:support-v4:25.3.1'
    compile 'commons-net:commons-net:3.5'
    //compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support:design:25.3.1'
    compile 'com.android.support:cardview-v7:25.3.1'
    compile 'com.android.support:recyclerview-v7:25.3.1'
    compile 'com.google.android.gms:play-services-appindexing:9.8.0'
    compile 'com.amazonaws:aws-android-sdk-core:2.4.2'
    compile 'com.amazonaws:aws-android-sdk-s3:2.4.2'
    compile 'com.amazonaws:aws-android-sdk-ddb:2.4.2'
    compile 'com.amazonaws:aws-android-sdk-cognitoidentityprovider:2.4.2'
}

//  Unnecessary dependency management:
//  Make sure the libs are available when begin compiling application project
//  This could be ignored because in real scenario, the pre-built libs are
//  already given to us before creating application.
tasks.whenTaskAdded { task ->
    if (task.name.contains('compile')) {
        task.dependsOn ':nativeaudio:distributeLib'
        task.dependsOn ':fpextractor:distributeLib'
    }
}

请:任何人都可以帮助我理解为什么我总是出现以下错误:

  

没有方法签名:   org.gradle.model.ModelMap.getDefaultProguardFile()适用于   参数类型:(java.lang.String)值:[proguard-android.txt]

1 个答案:

答案 0 :(得分:0)

Gradle实验不包括getDefaultProguardFile(),因为默认情况下它没有任何版本的ProGuard配置。

您可以使用从proguard-android.txt移动到proguard-rules.pro的行,然后更改此行:

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

进入这个:

proguardFiles.add(file('proguard-rules.pro'))