无法更改配置的依赖关系(启用即时运行后)

mbo*_*nin 53 android gradle android-studio android-gradle-plugin

我只是启用instant run了我的android工作室项目.(按照这里说明)

我的项目包含git子模块,不知怎的,这些子模块不再编译.

这是我得到的错误:

错误:(8,0)在解析后,无法更改配置':libraries:my_library:classpath'的依赖关系.

知道那可能有什么问题吗?

顶级build.gradle:

buildscript {
repositories {
    mavenCentral()
    jcenter()
    maven { url 'https://maven.fabric.io/public' }
}

dependencies {
    classpath 'com.android.tools.build:gradle:2.0.0-alpha1'
    classpath 'com.novoda:bintray-release:0.2.7'
    classpath 'io.fabric.tools:gradle:1.+'
}}
Run Code Online (Sandbox Code Playgroud)

模块build.gradle:

apply plugin: 'android'
apply plugin: 'io.fabric'

android {

    defaultConfig {
       versionCode 4850
       versionName '4850'
       compileSdkVersion 23
       buildToolsVersion '23.0.1'
    }

    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/MANIFEST.MF'
        exclude 'META-INF/NOTICE'
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    useLibrary 'org.apache.http.legacy'
}

repositories {
    mavenCentral()
    jcenter()
}


dependencies {
    [skip]
    compile project(':libraries:my_library:sdk')
}
Run Code Online (Sandbox Code Playgroud)

库build.gradle

apply plugin: 'com.android.library'

android {
    compileSdkVersion 23
    buildToolsVersion '23.0.2'

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 23
    }

    lintOptions {
        abortOnError false
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile fileTree(include: '*.jar', dir: 'libs')
    compile 'com.android.support:support-v4:23.1.0'
    compile 'com.android.support:appcompat-v7:23.1.0'

    testCompile 'junit:junit:4.12'

}
Run Code Online (Sandbox Code Playgroud)

tha*_*sma 33

gradle读取并执行build.gradle所包含模块的所有文件夹中的所有文件.如错误所示,它还尝试执行的根构建脚本:libraries:my_library.

您必须settings.gradle通过设置'projectDir' 来更改并包含库项目:

include ':app'

// Give your library project any module name, i.e. ':sdk'
include ':sdk'
// Then set the project path of the library module
project(':sdk').projectDir = new File('libraries/my_library/sdk')
Run Code Online (Sandbox Code Playgroud)

有了这个,settings.gradle您可以将库项目作为gradle依赖项引用:

compile project(':sdk')
Run Code Online (Sandbox Code Playgroud)

  • 这应该是公认的答案.改变项目结构不是解决方案 (10认同)

o.a*_*out 30

我有同样的问题.我通过删除classpath子模块顶级build.gradle文件来解决它.

dependencies { 
     // classpath 'com.android.tools.build:gradle:1.0.0'
}
Run Code Online (Sandbox Code Playgroud)

我不确定这是否是最好的事情,但它对我有用.


Ste*_*han 28

我有同样的问题.我将它与@RaGe 的(工作)示例项目进行了比较,发现了细微差别.

子项目文件夹必须以大写字母开头.

以下是我对@RaGes示例所做的更改,以打破它并让它再次运行.

结构破碎:

android-multi-project-sample
    + .gralde
    + .idea
    + app
    + build
    + gradle
    + myApplication2
    - .gitignore
    - android-multi-project-sample.iml
    - build.gradle
    - gradle.properties
    - gradlew
    - gradlew.bat
    - local.properties
    - settings.gradle
Run Code Online (Sandbox Code Playgroud)

导致以下错误:

Error:(8, 0) Cannot change dependencies of configuration ':myApplication2:classpath' after it has been resolved.

工作结构(带大写子项目)

android-multi-project-sample
    + .gralde
    + .idea
    + app
    + build
    + gradle
    + MyApplication2     // upper case!!!!!!
    - .gitignore
    - android-multi-project-sample.iml
    - build.gradle
    - gradle.properties
    - gradlew
    - gradlew.bat
    - local.properties
    - settings.gradle
Run Code Online (Sandbox Code Playgroud)

最高级别settings.gradle也必须改变:

+ include ':app', ':MyApplication2:mylibrary'
- include ':app', ':myApplication2:mylibrary'
Run Code Online (Sandbox Code Playgroud)

并且app/build.gradle必须改变这一点

+ compile project(':MyApplication2:mylibrary')
- compile project(':myApplication2:mylibrary')
Run Code Online (Sandbox Code Playgroud)

一切都在编译

小心!默认情况下,Git不区分大小写.使用

git mv -f myApplication2 temp
git mv -f temp MyApplication2
Run Code Online (Sandbox Code Playgroud)

重命名该文件夹.

  • 呃,请问谁回答? (5认同)
  • 谢谢!效果很好.由于一封小写字母,我无法相信我浪费了两天. (2认同)