Android studio将外部项目添加到build.gradle

Tac*_*0sS 137 android gradle android-library android-studio

我有一个示例项目,具有以下设置:

/root
  + Pure Java Lib
  + Android Test Lib
  + Android Test Project
Run Code Online (Sandbox Code Playgroud)

" 测试项目 "依赖于" 测试库 ",最后一个依赖于" 纯Java库 " 编译项目并启动此设置工作正常.

我现在正在考虑导入我之前的Eclipse工作区并使用Android studio,问题是项目设置不同,我想保持这种方式.

例如,如果要使用前面的示例:

/root
  + Android Test Lib
  + Android Test Project

/Some Other folder (another repository for example)
  + Pure Java Lib
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多配置,但是我找不到引用父文件夹范围之外的项目的方法(示例中的" root ").

在许多平台/模块中,你可以使用'..'在文件夹中向上移动,但这对我不起作用,也许我用错了.

有谁知道Gradle如何实现这一目标?

UPDATE

我会尝试更通用:

/C:/

  /Project A
    + Module 1 - Pure Java
    + Module 2 - Android Test Lib
    + Module 3 - Android Test Project

  /Project B
    + Module 1 - Pure Java
    + Module 2 - Pure Java
    + Module 3 - Pure Java
Run Code Online (Sandbox Code Playgroud)

我想用的模块1 B项目,在项目中.

Eth*_*han 219

假设Some Other Folder是gradle项目,您可以在settings.gradle文件中添加以下内容:

include ':module1'
project(':module1').projectDir = new File(settingsDir, '../Project B/Module 1')
Run Code Online (Sandbox Code Playgroud)

  • 很好的答案.在AS 1.0.2中,我还需要执行以下操作:右键单击模块 - >打开模块设置 - >依赖项 - > +(底部),选择模块依赖项,从列表中选择您的库,单击确定:) (5认同)

Dar*_*rux 45

你必须输入你的文件settings.gradle这行:

include ':module2'
project(':module2').projectDir = new File(settingsDir, '../Project 2/Module2')
Run Code Online (Sandbox Code Playgroud)

然后你必须在依赖树中添加你的builde.gradle(Module:app),这一行:

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

或者进入Project Structure > app > Dependencies,单击Add,选择3 Module Dependencies并选择你的模块

  • 如果您在从主应用程序引用库的类时遇到问题,这是因为库可能有不同的变体。因此,只需以适当的方式指定依赖项:`compile project(path: ':library', configuration: 'variant')`。这里,`variant` 由 `flavor` 和 `buildType` 组成,由库的 `build.gradle` 文件定义。例如,如果您希望以“develop”风格构建库的“release”构建类型,那么“variant”就是“developRelease”。 (2认同)

Var*_*oid 9

右键单击项目 - 选择"打开模块设置" - 在左窗格中选择"模块" - 单击顶部的"+"符号 - 选择"导入模块".

导入模块后.您需要将其添加为当前项目的依赖项.

在左窗格中选中"模块"并单击您的项目 - 现在进入依赖项选项卡并单击位于底部的"+"符号 - 选择第三个选项"模块依赖项",如果您已正确导入项目,它将向您展示可以作为依赖项添加到当前项目的所有可用模块.


小智 9

使用Gradle 1.10(不知道其他哪个版本有效)这是我根据这里给出的响应得出的结果http://forums.gradle.org/gradle/topics/reference_external_project_as_dependancy

我有一个api库项目,一个公共库项目和主应用程序项目.每个都是一个独立的开发项目,这两个库可以在多个应用程序之间共享.

在公共项目的settings.gradle中:

def apiLibDir = file('../android-api/android-api-lib')
def rootProjectDescriptor = settings.rootProject
settings.createProjectDescriptor(rootProjectDescriptor, 'android-api-lib', apiLibDir)
include ':android-api-lib'
Run Code Online (Sandbox Code Playgroud)

然后在主app项目settings.gradle中:

def apiLibDir = file('../android-libs/android-api/android-api-lib')
def rootProjectDescriptor = settings.rootProject
settings.createProjectDescriptor(rootProjectDescriptor, 'android-api-lib', apiLibDir)
include ':android-api-lib'

def commonLibDir = file('../android-libs/android-common/android-common-lib')
settings.createProjectDescriptor(rootProjectDescriptor, 'android-common-lib', commonLibDir)
include ':android-common-lib'
Run Code Online (Sandbox Code Playgroud)

在每个相应的build.gradle文件中,您只需通过settings.createProjectDescriptor中的名称引用它们,就像您对任何其他项目的依赖性一样:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':android-api-lib')
    compile project(':android-common-lib')
}
Run Code Online (Sandbox Code Playgroud)

这似乎有效.它甚至没有为定义api库的多个DEX文件引发错误,我怀疑因为它是同一个构建过程的所有部分而且Gradle足够聪明,可以全部解决.

  • 我一直在尝试这个,但问题是相应库中的依赖关系似乎永远不会被加载.因此,如果我只打开了库,那么它似乎很好但是当我从主应用程序中尝试它时,它表示所有导入的库都丢失了. (2认同)