我有一个自定义库,需要在大约10个项目中引用。在Eclipse中一切正常但我想将它们迁移到Android Studio以利用构建系统。我已经检查了
Android studio add external project to build.gradle
How to share a single library source across multiple projects
以及Gradleware中的一些其他链接和文档,但我无法编译我的项目。
我的文件结构如下:
+项目
| + libraryProject
| + ---工作区
| + ------ projectSrc
|
| + project0
| + ---工作区
| + ------ projectSrc0
|
| + PROJECT1
| + ---工作区
| + ------ projectSrc1
。
| + projectN
| + ---工作区
| + ------ projectSrcN
每个项目都包含文档,设计文件等......因此将src放在同一个根文件夹中并不方便。
在我的“project1”中,我使用了 settings.gradle 文件:
include ':module-custom-lib'
project(':module-custom-lib').projectDir = new File(settingsDir, '../../../libraryProject/workspace/projectSrc')
在我的 build.gradle 文件中,我添加了依赖项部分:
dependencies {
compile project(':..:..:..:libraryProject:workspace:projectSrc')
....
}
但是我收到一条错误消息,说找不到该项目。
我也使用了以下方法:
def customLib = file('../../../libraryProject/workspace/projectSrc')
settings.createProjectDescriptor(rootProjectDescriptor, 'module-custom-lib', customLib)
include ':module-custom-lib'
然后在 build.gradle
中dependencies {
compile project(':module-custom-lib')
....
}
请帮忙。谢谢你的时间。
编辑:我已经设法通过在项目目录中添加模块 app 作为后缀来实现它。
include ':module-custom-lib'
project(':module-custom-lib').projectDir = new File(settingsDir, '../../../libraryProject/workspace/projectSrc/app')
现在库成员完全解析,但项目的'R'资源类无法解析。所以,如果我这样做:
setContentView(R.layout.main);
无法找到该资源。清理和重建项目并不能解决问题。
编辑2:显然,清单合并存在问题,因为一旦我调整了两个项目的minSdk和targetSdk,问题就解决了。以前的解决方案非常有效。
答案 0 :(得分:4)
你的第一次尝试有一个更简单的语法,应该可行。您的 settings.gradle 文件看起来没问题:
include ':module-custom-lib'
project(':module-custom-lib').projectDir = new File(settingsDir, '../../../libraryProject/workspace/projectSrc')
虽然你应该谨慎地考虑在那里包含相对路径 - 但Android Studio可能不会使用与命令行相同的工作目录,因此引用与rootDir
相关的内容可能有助于缓解问题。
在模块的构建文件的dependencies
块中,您需要以与 settings.gradle 相同的方式引用模块,因此您需要'使用这样的东西:
dependencies {
compile project(':module-custom-lib')
}
在dependencies
区块中,您使用Gradle的项目命名空间链接到项目,并且由于您已经明确设置了库模块的根目录,因此您不需要&# 39;这里需要尝试在文件系统中找到它。那个:..:..:..
语法无论如何都不能用于引用项目根目录之外的模块,就像这个模块一样。
答案 1 :(得分:0)
您应该考虑捆绑"发布"您的库到Maven存储库(可能是您当地的Maven存储库)。这样,您可以从任何其他需要使用它的项目中引用您的库,就像您使用第三方库一样。