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

Android Studio中利用fat-aar实现多级依赖aar的合并打包实战

1. 为什么需要fat-aar合并打包在Android开发中我们经常会遇到这样的场景你开发了一个功能模块比如天气组件Weather.aar这个模块又依赖了第三方aar比如图表库Chart.aar。当你把Weather.aar提供给其他团队使用时他们不仅需要引入你的aar还要手动添加Chart.aar的依赖这显然不够优雅。我去年就踩过这个坑。当时给业务部门封装了一个视频播放SDK打包成aar后发给他们结果运行时各种ClassNotFoundException。排查后发现是SDK内部依赖的FFmpeg解码库没有被打包进去。这种多级依赖的场景正是fat-aar要解决的痛点。fat-aar的工作原理就像它的名字一样——把依赖喂胖。它会递归分析所有层级的依赖关系将子module、第三方aar、甚至远程仓库的依赖全部内嵌到最终的aar文件中。这样使用者只需要引入这一个胖aar就能获得完整功能。2. 基础环境配置2.1 插件版本选择首先要注意版本兼容性问题。根据我的实测经验Android Gradle Plugin 3.5.x ~ 4.2.x 建议使用fat-aar 1.3.6AGP 7.0 需要搭配fat-aar 1.3.8最新版AGP 8.0目前兼容性还不稳定建议在项目根目录的build.gradle中添加依赖buildscript { repositories { google() mavenCentral() } dependencies { classpath com.android.tools.build:gradle:7.4.2 classpath com.github.kezong:fat-aar:1.3.8 } }2.2 仓库配置在allprojects闭包中添加flatDir配置否则会找不到本地aarallprojects { repositories { flatDir { dirs libs // 指定本地aar存放目录 } google() mavenCentral() } }3. 多级依赖合并实战3.1 单层aar嵌入假设主模块app依赖本地Weather.aar最简单的配置如下apply plugin: com.kezong.fat-aar dependencies { // 普通依赖方式不会打包进aar // implementation(name: Weather-release, ext: aar) // fat-aar嵌入方式 embed(name: Weather-release, ext: aar) }这种场景下生成的app模块aar会包含Weather的全部代码和资源。3.2 多级嵌套依赖更复杂的场景是依赖链app → ModuleA → ModuleB → thirdparty.aar。这时需要在每一级都使用embed声明// ModuleA的build.gradle dependencies { embed project(:ModuleB) embed(name: thirdparty, ext: aar) } // ModuleB的build.gradle dependencies { embed com.squareup.okhttp3:okhttp:4.9.3 // 远程库也可以嵌入 }注意子module必须应用fat-aar插件否则嵌入会失效。4. R文件冲突解决方案4.1 问题现象合并后运行时可能会报错java.lang.NoClassDefFoundError: Failed resolution of: Lcom/weather/R$drawable;这是因为各模块的R文件包名不一致导致的。比如主模块R文件com.example.app.R子模块R文件com.weather.lib.R4.2 终极解决方案统一包名修改各模块的AndroidManifest.xmlmanifest packagecom.example.sdk关闭包名校验可选android { enforceUniquePackageName false }代码中统一引用import com.example.sdk.R;我在实际项目中采用方案13的组合虽然要修改历史代码但一劳永逸。方案2适合快速修复但可能带来其他编译问题。5. 高级配置技巧5.1 资源合并策略通过resPrefix避免资源命名冲突android { resourcePrefix weather_ }这样所有资源会被自动重命名比如原ic_icon → weather_ic_icon原bg_main → weather_bg_main5.2 排除特定依赖如果不想嵌入某些依赖可以这样配置dependencies { embed(com.squareup.retrofit2:retrofit:2.9.0) { exclude group: com.squareup.okhttp3 } implementation com.squareup.okhttp3:okhttp:4.9.3 }5.3 缓存问题处理更新aar后可能出现类找不到的问题解决方法修改build.gradle配置implementation fileTree(dir: libs, include: [*.aar, *.jar])或者给aar添加版本号embed(name: Weather-1.2.0, ext: aar)6. 常见问题排查6.1 依赖版本冲突在app模块添加强制版本声明configurations.all { resolutionStrategy { force com.google.code.gson:gson:2.8.9 } }6.2 重复类错误检查是否同时使用了embed和implementation声明同一个依赖// 错误示例 embed com.google.code.gson:gson:2.8.9 implementation com.google.code.gson:gson:2.8.9 // 正确做法 embed com.google.code.gson:gson:2.8.96.3 插件兼容性问题如果遇到Transform异常可以尝试升级AGP版本在gradle.properties中添加android.enableJetifiertrue7. 性能优化建议按需嵌入只embed必要的依赖使用proguard混淆android { buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile(proguard-android.txt) } } }分模块打包将稳定不变的依赖拆分成独立aar我在电商项目中实践发现合理使用fat-aar可以使SDK体积减少30%以上。最关键的是要分析清楚依赖关系避免无脑embed所有依赖。

相关文章:

Android Studio中利用fat-aar实现多级依赖aar的合并打包实战

1. 为什么需要fat-aar合并打包 在Android开发中,我们经常会遇到这样的场景:你开发了一个功能模块(比如天气组件Weather.aar),这个模块又依赖了第三方aar(比如图表库Chart.aar)。当你把Weather.a…...

关于准备智慧校园建设专项资金申报材料的参考清单

✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…...

突破模型部署瓶颈:TimesFM 2.5从500M到200M的压缩实践指南

突破模型部署瓶颈:TimesFM 2.5从500M到200M的压缩实践指南 【免费下载链接】timesfm TimesFM (Time Series Foundation Model) is a pretrained time-series foundation model developed by Google Research for time-series forecasting. 项目地址: https://gitc…...

打破设备壁垒:VR-Reversal实现3D内容自由视角全设备适配

打破设备壁垒:VR-Reversal实现3D内容自由视角全设备适配 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitcode.com/gh_…...

2026从APEC到进博会,标杆展览设计公司的成功密码

一、品牌用户的真实困境:当展览成为品牌突围的关键战场在信息碎片化的时代,线下展览已成为品牌与用户建立深度连接、展示核心实力、抢占心智的关键战场。然而,一场成功的展览背后,是无数细节的精密运转与强大执行力的支撑。品牌方…...

如何彻底安全地卸载微软Edge浏览器:EdgeRemover专业指南

如何彻底安全地卸载微软Edge浏览器:EdgeRemover专业指南 【免费下载链接】EdgeRemover PowerShell script to remove Microsoft Edge in a non-forceful manner. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemover 你是否厌倦了Windows系统预装的Mic…...

IL-21蛋白在肿瘤靶向治疗中的作用机制研究

一、研究背景与科学问题肿瘤微环境中功能性肿瘤浸润淋巴细胞的缺乏是导致肿瘤免疫疗法效果欠佳的重要原因。即使在富含肿瘤浸润淋巴细胞的肿瘤组织中,功能异常的PD-1阳性Tim-3阳性CD8阳性T细胞的存在仍是肿瘤患者预后不良的主要指标。IL-21蛋白是由CD4阳性T细胞和自…...

Open UI5 源代码解析之780:Label.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.m\src\sap\m\Label.js sap.m.Label 文件深度解析与项目作用说明 一、文件定位与整体职责 Label.js 位于 sap.m 组件库中,是一个非常基础却影响面极广的控件实现文件。它定义了 sap.m.Label 的完整行为,…...

广州PMP培训机构怎么选?才聚是标准答案

选广州PMP培训机构,核心看官方授权、师资、通过率、本地化服务、学考一体化,才聚在广州确实是综合实力最强、最稳妥的 “标准答案”。 一、在选择时,可以从下面几个方面来评估一家培训机构,看看哪家更适合你: 官方授权…...

13-40K!AI大模型应用工程师,非常详细收藏我这一篇就够了

■ AI大模型应用工程师 13-40K 01 AI大模型应用工程师 ■ 岗位职责: 1、负责AI大模型在实际业务场景中的应用开发,提升模型性能与用户体验; 2、参与需求分析,根据不同类型的需求场景,结合业务目标选择AI技术/模型实现相…...

利用快马平台快速构建b站a8直播观看页面原型

利用快马平台快速构建B站A8直播观看页面原型 最近想尝试开发一个B站A8直播的观看页面原型,主要想验证一下直播相关的技术方案。作为一个前端开发者,我深知从头开始搭建这样一个页面需要花费不少时间,特别是在处理视频流、弹幕互动和响应式设…...

2026年AI风口已至!月薪3万+岗位盘点+零基础转行指南,速收藏!

本文详细介绍了2026年转行AI的优势与机遇,指出行业人才缺口巨大且薪资水平高。文章全面梳理了AI行业的各类岗位,并针对技术、产品、运营、培训等不同转行路径,提供了分阶段的学习指南和推荐资源。此外,还针对应届毕业生、传统行业…...

利用闲置旧电脑搭建飞牛OS家庭服务器:从DDNS配置到安全外网访问全攻略

1. 为什么选择飞牛OS搭建家庭服务器 家里有台闲置的旧电脑,扔了可惜,留着又占地方?其实它完全可以变身为一台高性能的家庭服务器。我去年就用一台2015年的老笔记本搭建了飞牛OS服务器,到现在稳定运行了300多天。飞牛OS作为国产NAS…...

数字化转型深水区:技术从“支撑”到“驱动”的蜕变

对于身处一线的软件测试从业者而言,“数字化转型”早已不是一个陌生的词汇。我们经历了从手工测试到自动化测试的转变,见证了敏捷与DevOps带来的流程革新。然而,当转型浪潮进入“深水区”,一种更为根本的变革正在发生:…...

VRCT:打破VRChat语言壁垒的实时翻译与转录工具

VRCT:打破VRChat语言壁垒的实时翻译与转录工具 【免费下载链接】VRCT VRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 在全球化的虚拟社交平台VRChat中,语言差异常常成为跨文化交流的主…...

高效搭建个人知识管理系统:基于kepano-obsidian的完整指南

高效搭建个人知识管理系统:基于kepano-obsidian的完整指南 【免费下载链接】kepano-obsidian My personal Obsidian vault template. A bottom-up approach to note-taking and organizing things I am interested in. 项目地址: https://gitcode.com/gh_mirrors/…...

告别GPS模块!用IRIG-B码为你的工业设备打造超高性价比的10ns同步时钟源

工业级10ns同步时钟方案:IRIG-B解码模块的实战应用指南 在工业自动化、电力系统和精密测试测量领域,时间同步精度往往直接关系到系统运行的可靠性与数据采集的准确性。传统GPS/北斗模块虽然普及,却面临着信号覆盖受限、设备成本高昂以及潜在安…...

智能家居设备变“聪明”的秘密:我是如何给ESP32摄像头加上本地人脸识别功能的

给ESP32摄像头装上“大脑”:我的本地人脸识别开发实战 去年夏天,我家门铃摄像头频繁误报的困扰让我萌生了一个想法——为什么不能让它像人类一样"认出"熟面孔?市面上的智能摄像头要么依赖云端计算导致延迟高,要么隐私保…...

Enhancing Large Language Model Reasoning with Knowledge Graph Paths: A Faithful and Interpretable Ap

1. 为什么大模型需要知识图谱的"导航系统"? 想象一下,你被突然扔进一个陌生城市,手上只有一本过期的旅游指南。这时候如果有个本地人拿着最新地图给你指路,是不是完全不一样?这就是当前大语言模型&#xff0…...

用Python+ddddocr搞定某税网滑块验证码,再拆解SM2/SM4/HMacSHA256加密全流程

Python实战:国密算法与滑块验证的自动化登录全解析 当开发者遇到集成了滑块验证和国密加密的复杂登录系统时,传统爬虫手段往往束手无策。本文将完整演示如何用Python构建一个从滑块识别到加密处理的自动化登录系统,重点解决SM2/SM4加密和HMac…...

计算机毕业设计springboot展会门票系统 基于SpringBoot的会展票务数字化服务平台 SpringBoot框架下的博览会入场券预约与核销系统

计算机毕业设计springboot展会门票系统 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着会展经济的蓬勃发展和数字化转型的深入推进,各类展会活动规模不断扩大&am…...

计算机毕业设计springboot长春的地铁综合服务管理系统 基于SpringBoot的城市轨道交通智慧运维管理平台 SpringBoot框架下的地铁运营调度与设备管控系统

计算机毕业设计springboot长春的地铁综合服务管理系统 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着城市化进程的加速推进,长春市作为东北地区的重要交通枢纽&…...

从85分到95+:复盘我在科大奥锐虚拟仿真实验平台踩过的那些‘坑’

从85分到95:科大奥锐虚拟仿真实验平台的实战避坑指南 第一次接触科大奥锐虚拟仿真实验平台时,我和大多数同学一样,以为这不过是传统实验的电子版。直到连续三次实验分数卡在85分上下,才意识到这个平台对操作细节的严苛程度远超预期…...

CSS动画实战:5分钟搞定微信语音发送震动效果(附完整代码)

CSS动画实战:5分钟实现语音波形震动效果 最近在做一个社交类项目时,产品经理突然提出要在语音消息发送时加入波形动画效果,要求"要有微信那种专业感"。作为前端开发者,我第一反应就是:这得用Canvas吧&#x…...

Video-subtitle-remover:让视频创作者实现硬字幕无痕去除的AI解决方案

Video-subtitle-remover:让视频创作者实现硬字幕无痕去除的AI解决方案 【免费下载链接】video-subtitle-remover 基于AI的图片/视频硬字幕去除、文本水印去除,无损分辨率生成去字幕、去水印后的图片/视频文件。无需申请第三方API,本地实现。A…...

3步搞定小红书无水印下载:XHS-Downloader开源神器实战全解析

3步搞定小红书无水印下载:XHS-Downloader开源神器实战全解析 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链…...

告别ArcGIS依赖!用QGIS 3.28把SHP属性表一键导出Excel,附赠3个数据清洗小技巧

告别ArcGIS依赖!用QGIS 3.28高效导出SHP属性表到Excel的完整指南 当你在处理地理空间数据时,是否曾因ArcGIS的复杂操作或高昂成本而感到困扰?QGIS作为一款开源GIS软件,不仅完全免费,还能轻松完成从基础到高级的空间数据…...

CDA Level-2 考试全攻略:从报名到备考的保姆级教程(含最新题库资源)

CDA Level-2 考试全攻略:从报名到备考的保姆级教程 最近两年数据分析师认证热度持续攀升,CDA认证作为国内认可度较高的专业证书之一,Level-2考试通过率常年维持在40%左右。不同于Level-1的基础考核,Level-2更注重实际分析能力与统…...

CherryStudio+Obsidian联动指南:如何让本地笔记成为大模型的长期记忆?

CherryStudio与Obsidian深度整合:构建AI可理解的长期记忆系统 在信息爆炸的时代,我们每天都在产生大量笔记和知识片段,但这些内容往往沉睡在本地文件中,无法与智能工具形成有效互动。Obsidian以其独特的网状笔记结构和本地Markdow…...

ABAP邮件发送实战:如何在SAP中优雅地嵌入表格并添加附件(附完整代码)

ABAP邮件发送实战:如何在SAP中优雅地嵌入表格并添加附件(附完整代码) 在SAP系统的日常开发中,邮件发送功能几乎是每个ABAP开发者都会遇到的需求场景。无论是定期发送业务报表、异常数据提醒,还是系统自动通知&#xff…...