繁体   English   中英

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

[英]Android studio add external project to build.gradle

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

/root
  + Pure Java Lib
  + Android Test Lib
  + Android Test Project

' Test Project ' 依赖于' Test Lib ',最后一个依赖于' Pure Java Lib '编译项目并启动这个设置工作得很好。

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

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

/root
  + Android Test Lib
  + Android Test Project

/Some Other folder (another repository for example)
  + Pure Java Lib

我已经尝试了很多配置,但我没有找到一种方法来引用父文件夹范围之外的项目(在示例中为“ root ”)。

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

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

更新

我会尝试更通用:

/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

我想在项目 A 中使用项目 B 的模块 1。


更新:09-03-19

我现在看到了这个,我必须更新……将近 6 年后,今天我更聪明了,我可以肯定地说问题是我误解了“真相之源”的概念。

虽然有一个库的引用是一个很好的概念......并且可能看起来像一个“真实来源”,真正的“真实来源”将是每个项目使用该库的代码版本,原因库本身有版本......许多版本,“真相来源”与使用库的项目有关。

正确的方法是使用大多数开发人员不喜欢的东西,那就是 git 子模块,是的,在每个项目中复制源代码会导致每个项目使用不同版本的代码的可能性最大。

但是,您需要让所有项目都使用所有库的最新和最好版本。这本身就是一个挑战

这是使用库源开发项目的正确方法的原因是它可以扩展……您可以拥有数百个项目,每个项目都有自己的库配置。

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

include ':module1'
project(':module1').projectDir = new File(settingsDir, '../Project B/Module 1')

你必须在你的文件settings.gradle 中加入以下几行:

include ':module2'
project(':module2').projectDir = new File(settingsDir, '../Project 2/Module2')

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

implementation project(':module2')

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

使用 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'

然后在主应用项目 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'

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

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

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

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

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

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

我以一种方式重新提出这个问题,其中包含原始海报的意图, 我们如何引用位于我们主 Android 项目目录之外的自定义 Android 和 Java 库?

在那里我回答我自己的问题。 在核心,我的答案使用@Ethan(当前线程中所选答案的作者)gradle 编码洞察力。 但我的回答也解决了其他一些问题,并提供了详细的分步示例。

正如 Ethan 所说,如果您将其添加到 settings.gradle 中,它将向 Android Studio 添加一个外部项目(在本例中,它位于父文件夹中):

project(':../ProjectB/:module1')

然后,要将其添加为您的某个项目的依赖项,只需将其添加到该项目的 build.gradle 中作为另一个这样的依赖项(您也可以像此处那样以图形方式进行操作):

compile project(':../ProjectB/:module1')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM