当前位置: 首页 > news >正文

多个project合成一个aar发布

背景是有个sdk项目,最近我需要接入它使用。在接入的时候遇到了一些问题,所以有本文。

背景问题

sdk项目依赖了三个子模块,大约是这样的:

dependencies{implementation(project(":module-A"))implementation(project(":module-B"))implementation(project(":module-C"))}

我加了点代码publish到我新创建的maven服务。

  • 编译报错依赖 module-A、B、C找不到, 手动忽略了报错。
  • 运行时报错,这时候我发现module-A、B、C

这时候我发现这三个项目都不会发布到maven上。这几个项目我都不熟悉,特别是他们都定义了多个productFlavors。
这种情况怎么简单合成一个repo给我自己使用呢?

以前的经验

android多aar合并

android{ buildTypes{ release { minifyEnabled true } } }

大约就是自己写脚本合并,使用python,和项目无关,不用收到agp版本的制约。
但是这个写了脚本我后面也不一定会用到,我就在想有没有其他的方式。

fat-aar-:

https://github.com/aasitnikov/fat-aar-android

kezong/fat-aar-android 这个没维护了,只是支持到AGP3.0.找到一些它的issue,发现有一个下游的分支还在更新。

aasitnikov/fat-aar-android 下游这个支持到 agp 8.13

我试了一下,发现 存在问题:

  1. embed 的关键词没有找到
  2. 项目中使用kotlin-dsl,不知道是不是我哪里设置不对,用的时候有一些报错

fusedlibrary

fused-library

这个也存在一些问题:

  1. viewBinding = true 不支持
  2. minifyEnabled true会有报错,比较奇怪

不过总体是可以用的,可以这样使用:

  1. 创建一个新的module,这个module下只有一个build.gradle.kts的文件
  2. 在 build.gradle.kts 这里依赖其他的module,差不多是这样
dependencies{include(project(":module-A"))include(project(":module-B"))include(project(":module-C"))}
  1. step by step的说明见这里 add-fused-library-module

  2. 发布,直接publish就好

./gradlew clean :myFusedLibrary:publish

step by step细节

  1. Enable fused library support by addingandroid.experimental.fusedLibrarySupport=trueto thegradle.propertiesfile.
  2. Appendinclude(":myFusedLibrary")to thesettings.gradle.ktsfile.
  3. Addandroid-fusedlibrary = { id = "com.android.fused-library", version.ref = "agp" }under the[plugins]section in thegradle/libs.versions.tomlfile.
  4. Addalias(libs.plugins.android.fusedlibrary) apply falsein the plugins block in the top levelbuild.gradle.ktsfile.
  5. To create themyFusedLibrarymodule, create a new directory called myFusedLibrary (right-click ‘My Application’ > New > Directory).
  6. Create abuild.gradle.ktsfile in the myFusedLibrary module (right-click the myFusedLibrary module > New > File).
  7. Paste the following into themyFusedLibrary/build.gradle.ktsfile:
plugins{alias(libs.plugins.android.fusedlibrary)`maven-publish`}valbuildTime=java.time.LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))androidFusedLibrary{namespace="org.yeshen.fusedlibrary"minSdk=21}dependencies{include(project(":module-A"))include(project(":module-B"))include(project(":module-C"))}publishing{publications{register<MavenPublication>("release"){groupId="org.yeshen.fusedlibrary"artifactId="awesome"version="1.0.$buildTime"from(components["fusedLibraryComponent"])}}repositories{maven{url=uri("file://${rootDir}/../yeshen/file_release")name="Local"}}}

参考

  1. fused-library
  2. aasitnikov/fat-aar-android
  3. android多aar合并

本系列其他文章

  1. 多个project合成一个aar发布
  2. android多aar合并
  3. 多AAR合并之二Merge multiple jar/aar maven url into one
http://www.cnnetsun.cn/news/8068.html

相关文章:

  • 毕业设计实战:基于SpringBoot+MySQL的旅游网站设计与实现,从需求到测试全流程拆解,新手也能轻松通关!
  • 如何在没有电脑的情况下备份 iPhone
  • Python HTTPX性能优化实战:10个技巧解决90%的连接问题
  • 空调加热器MPC模型预测控制程序与修正Kalman滤波:附简洁文献与附图与运行指南
  • Spring Boot日志文件未生成问题排查
  • 2025CRM选型手册:主流CRM品牌客户 - 销售 - 团队管理能力 场景化对比
  • AI口碑决胜未来:2025年智能洞察与AI市场舆情分析平台深度对决
  • 5分钟掌握Nginx LDAP认证系统部署技巧
  • 基于否定选择算法的异常检测技术详解
  • 手把手根治Qwen-Agent工具重复调用:实战优化指南
  • 系统管理shutdown命令
  • AOT 与 GraalVM Native Image 深度解析
  • 告别单位换算烦恼!进销存软件让生意更省心
  • KAT-V1-40B:重新定义大模型推理效率的AutoThink技术革命
  • 计算机毕业设计springboot灾区物资管理系统 基于SpringBoot的灾后救援物资调配平台 SpringBoot驱动的应急物资供应链管理系统
  • 关于人工智能和就业的一线希望
  • 揭秘智能Agent在Docker中的编排难题:5大核心策略助你提升系统弹性
  • 记录:Spring异步执行的报异常No qualifying bean of type ‘org.springframework.core.task.TaskExecutor‘ available
  • 从零定义Agentic Apps:Docker Compose配置实战(附10个高可用场景案例)
  • 亲测3款降AI率工具!知网AI率从87%降到15%,免费降AI技巧+避坑测评全攻略
  • Kafka 的自动提交机制详解:Spring Boot 中如何正确使用?
  • PAT 1135 Is It A Red-Black Tree
  • YOLOv8-Ultralytics 系列文章目录
  • 自动化运维工程师之ansible启动rpcbind和nfs服务
  • 数字供应链系统哪个好?2025 供应链系统推荐排名来了,八大供应链系统
  • M.I.B.终极指南:解锁汽车娱乐系统的隐藏功能
  • 把 ABAP CDS 讲清楚:从 ABAP 7.40 SP05 的语义建模,到 SP08 的函数、参数化与扩展视图
  • 终极PHP兼容性检查工具:轻松应对版本迁移挑战
  • Kamailio usrloc 细节测试
  • 探索STM32单片机仿真温湿度采集控制系统