如何导出 android 库中的依赖项
How to export dependencies in android library
自版本 3.0.0 起,Gradle 的 Android 插件允许您将模块的依赖项导出到其他模块。
据我了解,这意味着在我的 android 库模块中,我应该能够使用 api <dependency declaration>
声明一个依赖项,并在我的主应用程序项目中将该依赖项作为导出的传递依赖项进行访问,我已将我的库模块声明为依赖项。
我也在使用静态文件依赖。
举个例子:
我有一个 class NeededEverywhere
,它在自己的 gradle 模块 everywhere-module
中定义。该模块与我的库模块在同一个项目中。
//library module's build.gradle:
dependencies {
api project(':everywhere-module')
}
在我的应用 build.gradle(在不同的 Android Studio 项目中)中,我声明了对库的依赖,但不是 everywhere-module
。这应该意味着 everywhere-module
是一个导出的传递依赖。
//app project's build.gradle
dependencies {
implementation files("path/to/my/library/file.aar")
}
但是,我无法在我的应用程序中访问 class NeededEverywhere
。
我做错了什么?
您正在直接引用 AAR。
依赖信息不在 AAR 中,就像依赖信息不在 JAR 中一样。依赖信息保存在工件存储库的元数据中,例如 Maven-style 存储库的 POM 文件。
因此,带有库模块的项目需要将其 AAR 发布到工件存储库。这可能是您机器本地的一个(例如,mavenLocal()
)。然后,需要依赖库模块的项目从存储库中执行,而不是通过 file()
。然后,Gradle可以从存储库中获取传递依赖信息并加以利用。
自版本 3.0.0 起,Gradle 的 Android 插件允许您将模块的依赖项导出到其他模块。
据我了解,这意味着在我的 android 库模块中,我应该能够使用 api <dependency declaration>
声明一个依赖项,并在我的主应用程序项目中将该依赖项作为导出的传递依赖项进行访问,我已将我的库模块声明为依赖项。
我也在使用静态文件依赖。
举个例子:
我有一个 class NeededEverywhere
,它在自己的 gradle 模块 everywhere-module
中定义。该模块与我的库模块在同一个项目中。
//library module's build.gradle:
dependencies {
api project(':everywhere-module')
}
在我的应用 build.gradle(在不同的 Android Studio 项目中)中,我声明了对库的依赖,但不是 everywhere-module
。这应该意味着 everywhere-module
是一个导出的传递依赖。
//app project's build.gradle
dependencies {
implementation files("path/to/my/library/file.aar")
}
但是,我无法在我的应用程序中访问 class NeededEverywhere
。
我做错了什么?
您正在直接引用 AAR。
依赖信息不在 AAR 中,就像依赖信息不在 JAR 中一样。依赖信息保存在工件存储库的元数据中,例如 Maven-style 存储库的 POM 文件。
因此,带有库模块的项目需要将其 AAR 发布到工件存储库。这可能是您机器本地的一个(例如,mavenLocal()
)。然后,需要依赖库模块的项目从存储库中执行,而不是通过 file()
。然后,Gradle可以从存储库中获取传递依赖信息并加以利用。