我有一个Android Instant App,结构如下:
local-lib
的本地aar库project\F\libs
。 F
' build.gradle正在关注:
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
api ":local-lib@aar"
}
我尝试将F
模块包含到Installed
app模块中,如下所示:
dependencies {
implementation project(':B')
implementation project(':F')
}
但是gradle无法解决local-lib
,给出错误:
Error:Could not resolve all dependencies for configuration ':Installed:releaseCompileClasspath'.
> Could not find :local-lib:.
Searched in the following locations:
... some remote repositories ...
Required by:
project :Installed > project :F
我尝试将libs
文件夹复制到project\Installed\libs
,然后就可以了。所以基本上我需要2份local-lib
来完成这项工作?我应该如何组织进口以避免重复?如果libs
文件夹位于F
模块内,则完美的情况。
答案 0 :(得分:1)
local-lib
,并从这里引用它,并为你的每个库做同样的事情。当您发布到工件存储库管理器时 - 让我们说一个Maven - 您将 .aar 与 pom 文件相结合,其中包含所有必需的依赖项。
你必须记住,你的aar是一个平面文件,意思是,当你在某处引用它时,没有办法跟踪它的传递依赖性(这是的工作Maven上的pom 文件。
这意味着当您在F
中引用Installed
时,会添加F
aar ,但Installed
不知道它必须获取local-lib
才能让F
正常工作,或者不知道在哪里。这就是为什么你在远程存储库上有行:gradle搜索所有依赖的地方(在每个可能的地方=你列出的每个存储库中)。
当您将代码复制/粘贴为项目的模块时,gradle知道什么是传递依赖项,因为它可以访问每个依赖项的gradle文件。
当你直接在Installed / libs文件夹中复制aar时,它也可以工作,因为这里有gradle检查(你的gradle中可能有一个编译行检查该文件夹)。
如果你想保留平面文件,你应该尝试在同一个文件夹级别上放置所有模块可以访问的地方(看看that问题),或者你可以尝试添加local-lib作为Android模块项目,而不仅仅是把它放在libs文件夹中。