添加库后无法使用Gradle编译Android项目

kni*_*irr 3 android gradle android-studio

在向我的Android项目添加库之前,布局是这样的:

  • MyappProject
    • Myapp
      • build.gradle
  • settings.gradle
  • build.gradle

顶层build.gradle始终为空,而settings.gradle文件仅包含:

include ':Myapp'
Run Code Online (Sandbox Code Playgroud)

我获得了一个库项目,可以将其成功导入到Android Studio中,因此我认为其中的gradle文件很好。我现在有以下结构:

  • MyappProject
    • Myapp
      • build.gradle
    • 图书馆
      • 图书馆
        • LibrarySubProject1
          • build.gradle
        • ....
        • build.gradle
  • settings.gradle
  • build.gradle

...并且顶级设置gradle现在看起来像:

include ':Myapp'
include ':libraries:Library'
Run Code Online (Sandbox Code Playgroud)

我还更新了Myapp的build.gradle,因此它在依赖项中包括了额外的最后一行:

dependencies {
    compile 'com.android.support:support-v4:+'
    compile files('libs/commons-lang3-3.1.jar')
    compile files('libs/jsoup-1.7.3.jar')
    compile project(':libraries:Library')
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,任何尝试使用gradle进行任何操作(同步文件,构建等)现在都可以使我获得以下信息:

Gradle 'MyappProject' project refresh failed:
     Configuration with name 'default' not found.
     Gradle settings
Run Code Online (Sandbox Code Playgroud)

设置的任何更改似乎均无效,并且Android Studio会将设置保留为“使用默认Gradle包装器”。据我了解,这意味着顶层build.gradle出现了问题,因为该文件的内容不足以构建子项目。但是,也许我误解了,因为Myapp曾经用来构建,而Library似乎也不错。删除编译项目(':libraries:Library')可以使gradle文件再次同步,但是我想使用该库...

任何有关如何解决此问题的建议都将受到欢迎。

编辑以从Library添加build.gradle。顶层:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
    }
}

allprojects {
    version = VERSION_NAME
    group = GROUP

    repositories {
        mavenCentral()
    }
}
Run Code Online (Sandbox Code Playgroud)

从下一个级别:

apply plugin: 'android-library'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.3"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 19
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')

        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}

apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'
Run Code Online (Sandbox Code Playgroud)

pyu*_*s13 5

您不能在Android Studio的项目中包含项目。您只能拥有模块,因此请如下所示更改项目结构,以使其符合所允许的项目-模块级别的结构。

MyappProject
   Myapp
    build.gradle
   libraries
    LibrarySubProject1
     build.gradle
     ....
settings.gradle
build.gradle(Root only one)
Run Code Online (Sandbox Code Playgroud)

现在对您的build.gradle文件执行以下操作

1.根build.gradle目录文件

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
    }
}

repositories {
    mavenCentral()
}
Run Code Online (Sandbox Code Playgroud)

如果您在库项目的根级别build.gradle文件中包含某些内容,则也要在此根级别build.gradle文件中包含该内容,因为在编译过程中,仅允许root拥有,而根文件将自动包含在每个子级别的build.gradle文件中。

2. LibraryProject的build.gradle文件

apply plugin: 'android-library'

    android {
        compileSdkVersion 19
        buildToolsVersion "19.0.3"

        defaultConfig {
            minSdkVersion 14
            targetSdkVersion 19
        }

        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                aidl.srcDirs = ['src']
                renderscript.srcDirs = ['src']
                res.srcDirs = ['res']
                assets.srcDirs = ['assets']
            }

            instrumentTest.setRoot('tests')

            debug.setRoot('build-types/debug')
            release.setRoot('build-types/release')
        }
    }

    apply from: 'https://raw.github.com/chrisbanes/gradle-mvn-push/master/gradle-mvn-push.gradle'
Run Code Online (Sandbox Code Playgroud)

3.您的主模块build.gradle文件应该看起来像

apply plugin: 'android'

        android {
            compileSdkVersion 19
            buildToolsVersion "19.0.3"

            defaultConfig {
                minSdkVersion 14
                targetSdkVersion 19
            }
       }

       dependencies {
           //YOUR MODULE DEPENDENCIES
           compile project(':libraries:LibrarySubProject1')
       }
Run Code Online (Sandbox Code Playgroud)

您的settings.gradle文件将像

  include ':Myapp'
  include ':libraries:LibrarySubProject1'
Run Code Online (Sandbox Code Playgroud)