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

Posted

技术标签:

【中文标题】Android Studio 将外部项目添加到 build.gradle【英文标题】:Android studio add external project to build.gradle 【发布时间】:2013-07-02 23:28:15 【问题描述】:

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

/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

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


更新:09-03-19

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

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

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

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

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

【问题讨论】:

我看到这个问题引起了一些关注......在非常努力地尝试之后,我现在放弃了 Android 工作室,因为我试图构建的设置的复杂性实在是太多了,并且构建我的最终项目是可行的,但非常不稳定。每次启动 Android Studio 时,我都必须再次设置一些参数,并手动使构建工作。我已经放弃了大约两个月了,我希望现在情况会好些! 这里的方法 2 解释了如何很容易地做到这一点:***.com/questions/25610727/… 【参考方案1】:

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

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

【讨论】:

someOtherFolder 指向一个项目文件夹,其中有模块,我有兴趣将其作为模块添加到 Android Lib 项目中 设置目录指向 'root' 我需要获得更高的级别,指向另一个项目中的另一个模块。 你能在那之后添加子模块吗?包括 ':someOtherFolder:proj1' 更新了一些细节。 settings.gradle 应该在 /Project A 很好的答案。在 AS 1.0.2 中,我还需要执行以下操作:右键单击模块 -> 打开模块设置 -> 依赖项 -> +(底部),选择模块依赖项,从列表中选择您的库,单击确定 :)【参考方案2】:

你必须在你的文件 settings.gradle 这几行:

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

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

implementation project(':module2')

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

【讨论】:

如果您在从主应用程序引用库的类时遇到问题,这是因为库可能有不同的变体。因此,只需以适当的方式指定依赖项:compile project(path: ':library', configuration: 'variant')。这里,variant 由库的build.gradle 文件定义的flavorbuildType 组成。例如,如果您希望 releasedevelop 风格构建库的类型,则 variantdevelopRelease【参考方案3】:

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

然后在主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'

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

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

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

【讨论】:

我一直在尝试这个,但问题是各个库中的依赖项似乎永远不会被加载。因此,如果我刚刚打开库,它似乎很好,但是当我从主应用程序尝试它时,它说所有导入的库都丢失了。 @Czechnology 有同样的问题。解决了。请参阅我对这个答案的评论:***.com/a/29603354/7408927【参考方案4】:

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

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

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

【讨论】:

这几乎可以工作...无法构建项目,因为依赖模块的输出未添加到 build.gradle 文件中,这正是我最初的问题。 我认为使用 gradle,您需要将所有项目放在同一个根文件夹中。试试看。将要添加为依赖项的项目放在与当前项目相同的文件夹中。 这是没有人愿意做的事情,但如果你想使用 Android Studio,这就是 ATM 的工作方式。我遵循的另一种替代方法是,我在 Intellij 中创建项目,设置所有依赖项,然后将该项目导入 Android Studio,通过这样做,我强制 Android Studio 使用 ant 构建系统而不是 Gradle。希望能帮助到你。干杯!! @Varundroid,解决方案是首先使用 Ethan 的答案导入对独立库的引用。然后使用您的答案将该模块添加到主应用程序的依赖项中。这允许您在多个应用程序中引用同一个库,而无需复制库代码。【参考方案5】:

我在How do we reference custom Android and Java Libraries living outside the directory of our Main Android Project? 以一种包含原始发帖人意图的方式重新提出这个问题

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

【讨论】:

【参考方案6】:

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

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

然后,要将其添加为您的一个项目的依赖项,只需将其作为另一个依赖项添加到该项目的 build.gradle 中(您也可以以图形方式进行 as in here):

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

【讨论】:

以上是关于Android Studio 将外部项目添加到 build.gradle的主要内容,如果未能解决你的问题,请参考以下文章

android studio 导入外部库文件,以及将项目中module变成library引用依赖

Android Studio外部本机构建预编译头

我将如何创建一个 Visual Studio 外部工具来运行“将项目添加到文件夹...”TFS 命令?

Android Studio导入项目失败时,三步搞定它

如何在 android studio 中为 IBM MobileFirst 项目导入外部库项目?

集成其他库 - Android Studio