当前位置 : 主页 > 手机开发 > 其它 >

在其他几个依赖库中分离Android项目

来源:互联网 收集:自由互联 发布时间:2021-06-22
我有一个名为’app-project’的项目(在这里缩写为AP),它有一个模块“app”.为了使事情可以重复使用,这个项目依赖于另一个名为’lib- android-network'(LAN)的项目库和他的模块库.它取决于另一
我有一个名为’app-project’的项目(在这里缩写为AP),它有一个模块“app”.为了使事情可以重复使用,这个项目依赖于另一个名为’lib- android-network'(LAN)的项目库和他的模块库.它取决于另一个名为’lib-android-base'(LAB)的项目和他的模块“lib”.所有这些项目都保留在层次结构中的同一目录中.我在 Windows 8.1上使用Gradle和Intellij.

例如:目录:
    根/应用项目
    根/ LIB-机器人网络
    根/ LIB-机器人基

我从项目AP开始依赖项目局域网,没有项目LAB.

使AP看到LAN我的settings.gradle的AP是:

include ':app', "../lib-android-network", "../lib-android-network:lib"

在’app’模块的build.gradle中我有:

compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':../lib-android-network:lib')

我不知道如何(在达到这个配置之前我必须做很多尝试)但是直到现在它才能完美运行,当需要第三个LAB项目时.

正如我现在说的,我有LAN取决于LAB.所以我放入了局域网settings.gradle文件:

include ':lib', '../lib-android-base', '../lib-android-base:lib'

在LAN’lib’模块的build.gradle中:

compile project(':../lib-android-base:lib')

这是适用于AP的相同想法 – >局域网依赖,但当我对我的第一个项目运行Gradle时,我收到此错误:

错误:(37,0)在项目’:../ lib-android-network:lib’中找不到带路径’:../ lib-android-base:lib’的项目.

我认为这是因为依赖项目应该作为模块保留在父项目中,但它对我来说并不感兴趣,因为我不希望将项目复制到另一个项目中以使其工作.我想保留相同的目录层次结构级别.我也不想添加Intellij模块依赖项(除非确定工作),因为在我达到第一个工作配置之前,我在执行此操作时遇到了很多问题.

编辑

基于this answer和this example project,我改变了自己项目中的一些东西,使其更加正确:

AP项目:

settings.gradle:

include ':lib-android-network', ':lib-android-network:lib'
project(':lib-android-network').projectDir = new File(settingsDir, '../lib-android-network')
project(':lib-android-network:lib').projectDir = new File(settingsDir, '../lib-android-network/lib')

应用程序/的build.gradle:

compile project(':lib-android-network:lib')

局域网项目:

settings.gradle:

include ':lib-android-base', ':lib-android-base:lib'
project(':lib-android-base').projectDir = new File (settingsDir, '../lib-android-base')
project(':lib-android-base:lib').projectDir = new File (settingsDir, '../lib-android-base/lib')

LIB /的build.gradle:

compile project(":lib-android-base:lib")

但我仍然得到同样的错误:

错误:(39,0)在项目’:lib-android-network:lib’中找不到带路径’:lib-android-base:lib’的项目.

—编辑2 —

如果我将网络项目的settings.gradle配置重复到app项目,它可以工作

include ':lib-android-base', ':lib-android-base:lib', ':lib-android-network', ':lib-android-network:lib'
project(':lib-android-base').projectDir = new File(settingsDir, '../lib- android-base')
project(':lib-android-base:lib').projectDir = new File(settingsDir, '../lib-android-base/lib')

但是我想我不得不在我的基础应用程序中重复这个配置,每当我必须向lib-android-network项目添加依赖项时.它会变得混乱……

是否有一个“最佳实践”来处理几个图书馆项目?处理它的最佳方法是哪种?是否将每个lib添加为顶级项目的子模块?

虽然我还没有找到完美的解决方案.到目前为止,我找到的最佳解决方案是基于@hgoebl发现的 blog post并在评论中发布:

在这里描述我做了什么:

我对项目lib-android-base进行了更改:为了测试另一个不同的配置,我将模块名称’lib’更改为’lib_base’并将其保留,但没有任何影响.

我将IDE从Intellij 14.1.4更改为Android Studio 1.3.1:我认为android studio更好地应对了Gradle中的导入.

在settings.gradle文件中的lib-android-network上,我添加了:

//":base" here can be any word you use to name lib-android-base project in lib-android-network context.

include ':base'
project (':base').projectDir = new File ('../lib-android-base/lib_base/')

在lib-android-network / lib build.gradle文件中,我添加了:

compile project (':base')

在我的App Project settings.gradle文件中,我添加了:

include ':base'
include ':network'
project(':base').projectDir = new File ('../lib-android-base/lib_base/')
project(':network').projectDir = new File('../lib-android-network/lib/')

在我刚刚添加的App Project模块build.gradle文件中:

compile project (':network')

我没有找到解决方案的唯一问题是我必须在App项目中引用’android-lib-base’,因为我不直接使用它.但对我来说现在还可以.

网友评论