微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Android库中本地添加jar vs Maven依赖

如何解决在Android库中本地添加jar vs Maven依赖

我在我的 android 库项目中遇到了一个奇怪的行为。我的项目结构和依赖项如下:

App (.apk) -> main-library (.aar) -> common-library (.aar 但可以是 .jar)

现在公共库在多个项目之间共享,并且具有使用改造依赖项的网络层,准备了具有 Koin 依赖项和其他一些小依赖项的 di 方案。目前它作为 .aar 文件分发,但这会导致传递依赖的老问题(它存在于主库的 pom.xml 中)。由于 aar 中没有资源,我只需要 classes.jar 文件。因此,我将公共库的发布任务更改为发布类 jar 而不是 .aar:

 publishing {
    publications {
....
       groupId "com.fish.common"
       artifactId "common-lib"
       version  "1.0.0-jar"
       //was:
       //artifact("$buildDir/outputs/aar/${libraryName}.aar")
       //Now is:
       artifact("$buildDir/intermediates/aar_main_jar/release/classes.jar")
       //I also publish debug separately but it's omitted for simplicity
    }
....
}

这实际上是将具有正确工件名称的类 .jar 文件与 pom.xml 一起发布到我的存储库中

如果我像这样通常包含它,则不会在我的主库中:

implementation("com.fish.common:common-lib:1.0.0-jar"){
    transitive = false;
}

在我构建并发布主库之后,公共库的依赖项仍然存在于 pom.xml 文件中。

<dependency>
  <groupId>com.fish.common</groupId>
  <artifactId>common-lib</artifactId>
  <version>1.0.0-jar</version>
</dependency>

但是,如果我删除上述 maven 依赖项并将我的 classes.jar 从 common-library(文件明显重命名)本地添加到我的主库项目中,并像这样包含它:

 implementation filetree(dir: "libs",include: ["*.jar"])

然后我的 main-library .aar 是使用来自 common-lib 的 .jar 文件构建的,当我构建我的 .apk 时它在运行时工作,只有 main-library .aar 的依赖项。

现在你可以看到在本地添加这个文件有点解决了我的问题,但是当你想要跟踪版本并且在 CI 构建系统中也更复杂时,维护本地依赖是相当平凡和更麻烦的。

所以我的问题是 - 我可以达到与本地依赖相同的效果,但在 Maven 存储库中拥有 common-lib 吗?

PS:我知道 fat-aar 插件,但它有它自己的问题,新构建 gradle 工具的问题让我过去退出它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。