2016-04-28 53 views
2

當我嘗試使用gradle構建我的Android應用程序時,出現奇怪的錯誤。Gradle無法找到參數[23.0.2]的方法buildToolsVersion(),但構建工具版本實際存在

,當我嘗試運行gradle build我得到這個錯誤:

Could not find method buildToolsVersion() for arguments [23.0.2] on root project 'latest'. 

不過,我檢查了我的Android SDK文件夾,看看這個版本實際上是缺少或沒有。換句話說,發行ls $ANDROID_HOME/build-tools/的結果是這樣的:

19.1.0 20.0.0 21.1.2 22.0.1 23.0.1 23.0.2 23.0.3 

正如你所看到的,23.0.2存在。什麼似乎是問題?

這是我的根build.gradle文件:

// 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:2.0.0' 

     // NOTE: Do not place your application dependencies here; they belong 
     // in the individual module build.gradle files 
    } 
} 

allprojects { 
    repositories { 
     jcenter() 
     mavenCentral() 
    } 
} 

ext { 
    compileSdkVersion 23 
    buildToolsVersion '23.0.2' 
} 
subprojects { subproject -> 
    afterEvaluate{ 
     if((subproject.plugins.hasPlugin('android') || subproject.plugins.hasPlugin('android-library'))) { 
      android { 
       compileSdkVersion rootProject.ext.compileSdkVersion 
       buildToolsVersion rootProject.ext.buildToolsVersion 
      } 
     } 
    } 
} 

這是build.gradle文件

apply plugin: 'com.android.application' 
apply from: 'copyLibs.gradle' 
apply plugin: 'eclipse' 

android { 
    compileSdkVersion rootProject.ext.compileSdkVersion 
    buildToolsVersion rootProject.ext.buildToolsVersion 
    defaultConfig { 
     applicationId "com.marco.myapp" 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 35 
     versionName "1.2.0.15" 
    } 

    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 
    } 

    // avoid Travis failures 
    lintOptions { 
     abortOnError false 
    } 
} 

dependencies { 
    compile 'com.android.support:appcompat-v7:22.0.0' 
    compile 'com.android.support:recyclerview-v7:22.0.0' 
    //compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile project(':libraries:openpgp-api-lib') 
    compile 'org.eclipse.jgit:org.eclipse.jgit:3.7.0.201502260915-r' 
    compile 'com.jcraft:jsch:0.1.52' 
    compile 'org.apache.commons:commons-io:1.3.2' 
    compile 'com.jayway.android.robotium:robotium-solo:5.3.1' 
    compile 'com.melnykov:floatingactionbutton:1.2.0' 
} 
tasks.findAll {  
    it.name.startsWith 'assemble' 
}.each { 
    it.dependsOn copyDependenciesIntoLibs 
} 

回答

2

你看到的就是這個道理,因爲你是在聲明變量根項目缺乏任務。

ext { 
    compileSdkVersion 23 
    buildToolsVersion '23.0.2' 
} 

應該是:

ext { 
    compileSdkVersion = 23 
    buildToolsVersion = '23.0.2' 
} 
-1

它在Android Tools Doc

被記錄在案。如果你有大量的Android模塊,您可能希望避免在所有這些值中手動設置相同的值。因爲你可能混合了android和android-library項目,所以你不能通過子項目閉包應用這些插件。但是,您可以在根項目上設置值,然後從模塊中引用該值。

看來你不能在subprojects塊內使用它。

的解決方法是在頂層文件中聲明:

ext { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 
} 
在所有模塊使用

然後:

android { 
    compileSdkVersion rootProject.ext.compileSdkVersion 
    buildToolsVersion rootProject.ext.buildToolsVersion 
} 
+0

但是,這就是我只是做... 在根'build.gradle'文件我把'buildToolsVersion 「23.0.2」',並在模塊中我把'buildToolsVersion rootProject.ext.buildToolsVersion'。 仍然無法正常工作... –

相關問題