Android 工作室向 build.gradle 添加外部项目

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

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

其中“ 测试计划”取决于“ 实验室测试”,而最后一个取决于“ 纯 Java Lib编译项目和启动这个设置工作得很好。

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

例如,如果使用前面的例子:

/root
+ Android Test Lib
+ Android Test Project


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

我已经尝试了许多配置,但是我没有找到一种方法来引用父文件夹范围之外的项目(例子中是‘ ’)。

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

有没有人知道怎样利用 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

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


更新: 09-03-19

我现在看到了这一点,我必须更新... 经过近6年,今天我更加明智,我可以肯定地说,问题是我误解了“真理之源”的概念。

虽然有一个库的参考文献是一个很好的概念。.可能看起来像一个“真理之源”,真正的“真理之源”将是每个项目使用的代码库的版本,因为库本身就有版本。.许多版本的“真相的来源”是相对于使用该库的项目。

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

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

这是使用库资源开发项目的正确方法的原因是,这种规模... ... 您可以拥有数百个项目,每个项目都有自己的库配置。

94394 次浏览

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

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

保持“模块”在左窗格中选择,然后点击你的项目-现在进入依赖项选项卡,点击位于底部的“ +”符号-选择第三个选项“模块依赖项”,如果你正确导入了你的项目,它会显示所有可用的模块,可以作为依赖项添加到你当前的项目。

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

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

对于 Gradle 1.10(不知道其他版本是否有效) ,这是我根据这里给出的 http://forums.gradle.org/gradle/topics/reference_external_project_as_dependancy响应得出的结论

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

在常见项目的设置中:

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

然后在主应用程序项目 setings.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 文件中,您只需按照在 setings.createProjectDescriptor 中给出的名称来引用它们,就像引用任何其他项目依赖项一样:

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

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

正如 Ethan 所说,如果你把这个添加到你的 setings.gradle 中,它会把一个外部项目添加到 Android Studio 中(在这个例子中,它在父文件夹中) :

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

然后,要将它作为一个项目的依赖项添加,只需将它作为另一个依赖项添加到该项目的 build.gradle 中(您也可以图形化地使用 就是这里) :

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

你必须在你的文件 设置,等级这行:

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

然后你必须在 依赖关系树中加入你的 Gradle (模块: app),这一行:

implementation project(':module2')

或进入 工程项目结构 > 应用程序 > 依赖性,单击 ,选择 3单元依赖项并选择您的模块

我重新问这个问题的方式,需要原来的海报的意图在 我们如何引用生活在我们的主 Android 项目目录之外的自定义 Android 和 Java 库?

在那里,我回答了我自己的问题。实际上,我的答案使用了@Ethan (当前线程中选择的答案的作者)的分级编码洞察力。但是我的答案也引导了其他一些陷阱,并提供了一个详细的一步一步的例子。