导入依赖于本地 aar 文件的库模块
Import library module that has dependency on local aar file
我有一个 Android 具有以下结构的即时应用程序:
- B:基础模块
- 已安装:已安装的应用程序模块
- 免安装:免安装应用模块
- F:具有特定于已安装应用程序的功能的功能。 F 依赖于位于
project\F\libs
. 的本地 aar 库 local-lib
F
的 build.gradle 如下:
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
api ":local-lib@aar"
}
我尝试将 F
模块包含到 Installed
应用程序模块中,如下所示:
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
模块内。
恕我直言,让它工作的最干净的方法是使用一些本地存储库,比如 Maven,在这里发布你的 local-lib
,然后从这里引用它,并对你的每个库执行相同的操作.当你发布到一个工件存储库管理器——假设是一个 Maven——你将拥有你的 .aar 和一个 pom 文件,其中包含所有需要的依赖项。
你必须记住,你的 aar 是一种平面文件,这意味着,当你在某处引用它时,没有办法跟踪它的传递依赖性(这是 pom Maven 上的文件)。
这意味着当你在Installed
中引用F
时,添加了F
aar,但是Installed
没有不知道它必须获得 local-lib
才能使 F
正常工作,或者不知道在哪里。这就是为什么你在远程存储库上有几行:gradle 在任何地方(在每个可能的地方 = 在你列出的每个存储库中)搜索依赖项。
当您 copy/paste 将代码作为项目的模块时,gradle 知道什么是传递依赖项,因为它可以访问每个依赖项的 gradle 文件。
当您将 aar 直接复制到 Installed/libs 文件夹中时,它也可以工作,因为 gradle 会检查此处(您的 gradle 中可能有一个编译行检查该文件夹)。
如果你想保留平面文件,你应该尝试把所有模块都可以访问的地方放在同一文件夹级别(看看 that 问题),或者你可以尝试添加本地文件-lib 作为 Android 模块项目,而不只是将其放在 libs 文件夹中。
我有一个 Android 具有以下结构的即时应用程序:
- B:基础模块
- 已安装:已安装的应用程序模块
- 免安装:免安装应用模块
- F:具有特定于已安装应用程序的功能的功能。 F 依赖于位于
project\F\libs
. 的本地 aar 库
local-lib
F
的 build.gradle 如下:
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
api ":local-lib@aar"
}
我尝试将 F
模块包含到 Installed
应用程序模块中,如下所示:
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
模块内。
恕我直言,让它工作的最干净的方法是使用一些本地存储库,比如 Maven,在这里发布你的 local-lib
,然后从这里引用它,并对你的每个库执行相同的操作.当你发布到一个工件存储库管理器——假设是一个 Maven——你将拥有你的 .aar 和一个 pom 文件,其中包含所有需要的依赖项。
你必须记住,你的 aar 是一种平面文件,这意味着,当你在某处引用它时,没有办法跟踪它的传递依赖性(这是 pom Maven 上的文件)。
这意味着当你在Installed
中引用F
时,添加了F
aar,但是Installed
没有不知道它必须获得 local-lib
才能使 F
正常工作,或者不知道在哪里。这就是为什么你在远程存储库上有几行:gradle 在任何地方(在每个可能的地方 = 在你列出的每个存储库中)搜索依赖项。
当您 copy/paste 将代码作为项目的模块时,gradle 知道什么是传递依赖项,因为它可以访问每个依赖项的 gradle 文件。
当您将 aar 直接复制到 Installed/libs 文件夹中时,它也可以工作,因为 gradle 会检查此处(您的 gradle 中可能有一个编译行检查该文件夹)。
如果你想保留平面文件,你应该尝试把所有模块都可以访问的地方放在同一文件夹级别(看看 that 问题),或者你可以尝试添加本地文件-lib 作为 Android 模块项目,而不只是将其放在 libs 文件夹中。