我有一个示例项目,具有以下设置:
/root
+ Pure Java Lib
+ Android Test Lib
+ Android Test Project
“测试项目”依赖于“测试库”,最后一个依赖于“纯Java库”编译项目并启动此设置工作正常。
我现在正考虑导入我以前的Eclipse工作区并使用Android studio,问题是项目设置不同,我想保持这种方式。
例如,如果要使用前面的示例:
/root
+ Android Test Lib
+ Android Test Project
/Some Other folder (another repository for example)
+ Pure Java Lib
我已经尝试了很多配置,但是我找不到引用父文件夹范围之外的项目的方法(示例中的“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
我想在项目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')
然后你必须在依赖树中添加build.gradle(Module:app),这一行:
compile 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'
然后在主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足够聪明,可以全部解决。
右键单击项目 - 选择“打开模块设置” - 在左窗格中选择“模块” - 单击顶部的“+”符号 - 选择“导入模块”。
导入模块后。您需要将其添加为当前项目的依赖项。
在左窗格中选中“模块”并单击您的项目 - 现在进入依赖项选项卡并单击位于底部的“+”符号 - 选择第三个选项“模块依赖项”,如果您已正确导入项目,它将向您展示可以作为依赖项添加到当前项目的所有可用模块。
我以一种方式重新提出这个问题,这种方式需要原始海报在How do we reference custom Android and Java Libraries living outside the directory of our Main Android Project?的意图
我在那里回答我自己的问题。在核心,我的答案使用@ Ethan(当前线程中所选答案的作者)gradle编码洞察力。但我的回答也导航了其他一些问题并提供了详细的一步一步的例子。
正如Ethan所说,如果你将它添加到settings.gradle,它会向Android Studio添加一个外部项目(在这个例子中,它在父文件夹中):
project(':../ProjectB/:module1')
然后,要将其添加为您的某个项目的依赖项,只需将其添加到该项目的build.gradle中作为另一个依赖项(您也可以以图形方式执行as in here):
compile project(':../ProjectB/:module1')