我有一个示例项目,具有以下设置:
/root
+ Pure Java Lib
+ Android Test Lib
+ Android Test Project
“测试项目”依赖于“测试库”,最后一个依赖于“ 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子模块,并且重复每个项目中的源代码,因此每个项目使用不同版本的代码的机会最多。
然而,您需要瞄准所有项目,以使用所有库的最新版本..这本身就是一项挑战
这是使用库源开发项目的正确方法的原因是这可以扩展......您可以拥有数百个项目,每个项目都有自己的库配置。
答案 0 :(得分:216)
假设Some Other Folder是gradle项目,您可以在settings.gradle文件中添加以下内容:
include ':module1'
project(':module1').projectDir = new File(settingsDir, '../Project B/Module 1')
答案 1 :(得分:43)
您必须在此文件 settings.gradle 中输入以下内容:
include ':module2'
project(':module2').projectDir = new File(settingsDir, '../Project 2/Module2')
然后您必须在依赖项树中添加 builde.gradle(Module:app),这一行:
compile project(':module2')
或进入项目结构> app > 依赖关系,单击添加,选择 3 Module Dependencies 并选择您的模块
答案 2 :(得分:9)
右键单击项目 - 选择“打开模块设置” - 在左侧窗格中选择“模块” - 单击顶部的“+”符号 - 选择“导入模块”。
导入模块后。您需要将其添加为当前项目的依赖项。
在左窗格中选中“模块”,然后单击项目 - 现在进入依赖项选项卡,然后单击位于底部的“+”符号 - 选择第三个选项“模块依赖项”,如果已正确导入项目,它将显示可以作为依赖项添加到当前项目的所有可用模块。
答案 3 :(得分: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'
然后在主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足够聪明,可以全部解决。
答案 4 :(得分:1)
我以一种需要原始海报的方式重新提出这个问题。意图How do we reference custom Android and Java Libraries living outside the directory of our Main Android Project?
我回答了我自己的问题。在核心,我的答案使用@ Ethan(当前线程中所选答案的作者)gradle编码洞察力。但我的回答也导航了其他一些问题,并提供了详细的分步示例。
答案 5 :(得分:-1)
正如Ethan所说,如果你将它添加到settings.gradle,它会向Android Studio添加一个外部项目(在这个例子中,它在父文件夹中):
project(':../ProjectB/:module1')
然后,要将其添加为您的某个项目的依赖项,只需将其添加到该项目的build.gradle中作为另一个依赖项(您也可以以图形方式as in here执行):
compile project(':../ProjectB/:module1')