在Android Studio中引用外部库项目(v0.8.9)

时间:2014-09-15 03:44:21

标签: android android-studio android-gradle build.gradle

我有一个自定义库,需要在大约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,问题就解决了。以前的解决方案非常有效。

2 个答案:

答案 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存储库)。这样,您可以从任何其他需要使用它的项目中引用您的库,就像您使用第三方库一样。