例如:目录:
根/应用项目
根/ 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’,因为我不直接使用它.但对我来说现在还可以.