安卓官方版fat-aar:使用Fused Library将多个Android库发布为一个库 - Wesley’s Blog

在开发 sdk 时,内部一般会划分好几个模块。但当需要打包成一个模块发布时,往往需要依赖第三方插件。比如著名的 fat-aar:https://github.com/kezong/fat-aar-android,但该库不支持 AGP8.0 了,有其他开发者单独fork了一个仓库来进行维护,支持 AGP8.0+:aasitnikov/fat-aar-android: Gradle plugin for merging android libraries (AAR)。

现在安卓官方终于支持将多个库打包成一个aar 了:Publish multiple Android libraries as one with Fused Library | Android Studio | Android Developers。宣布从 AGP8.12 开始可以使用com.android.fused-library来进行合并多模块。不过从Maven Repository: com.android.fused-library » com.android.fused-library.gradle.plugin上面可以看到,一些早期版本也可以支持的,不过可能有 bug,我试了 AGP8.10 也是可以的。

相比 fat-aar 的优点是:

  • 官方支持
  • 合并模块时支持依赖传递,也就是子模块的依赖树会出现在 pom 文件里面。fat-aar 需要通过pom.withXml 来处理。

缺点是:

  • 支持插件版本有限,官方表示是AGP8.12 开始才支持。
  • 传递依赖项不会打包。需要逐个指定打包进 aar 的依赖。

后面还会继续说该库目前的问题,先看看怎么用。

官方的工程示范:

readme 的插件名称目前是写错了的:应该是com.android.fused-library

gradle-recipes/applyFusedLibraryPlugin at agp-8.10 · android/gradle-recipes

可以参考这个进行插件引入:

Publish multiple Android libraries as one with Fused Library | Android Studio | Android Developers

问题

嵌套依赖不支持打包

官方的例子是支持嵌套的:

* indicates an include dependency of the :fusedLibrary module

┌─────────────────────────────────────────┐
│             :app                        │
│               ▲                         │
│               │                         │
│         :fusedLibrary                   │
│         ▲           ▲                   │
│         │           │                   │
│    :androidLib2*  :androidLib1*         │
│         ▲            ▲                  │
│         │            │                  │
│ :androidLib3 com.google.code.gson:gson* │
└─────────────────────────────────────────┘
dependencies {include(project(":androidLib1"))include(project(":androidLib2"))include("com.google.code.gson:gson:2.10.1")include(files("libs/simple-jar-with-A_DoIExist-class.jar"))
}

实际上androidLib3 没有被打包,变成了一个依赖fused-library-samples:androidLib3:unspecified:

{"included": ["project :androidLib1","project :androidLib2","com.google.code.gson:gson:2.10.1"],"dependencies": ["org.jetbrains.kotlin:kotlin-stdlib:1.9.22","org.jetbrains:annotations:13.0","fused-library-samples:androidLib3:unspecified"]
}

有一些远程包暂时打包不了

A failure occurred while executing com.android.build.gradle.tasks.FusedLibraryMergeArtifactTask$FusedLibraryMergeArtifactWorkAction

> java.lang.NullPointerException (no error message)

暂不支持携带源码发布

暂不能混淆

不支持Databinding

无法在单个融合库中融合多个 build 类型和产品变种。需要为不同的变体创建单独的融合库。

kotlin_module冲突

如果有两个base模块会产生冲突, base/base ,feature/base

2 files found with path ‘META-INF/base_release.kotlin_module’ from inputs:

需要修改一下kotlin_module 的名字

android - Duplicate files copied in APK META-INF/library_release.kotlin_module - Stack Overflow

ext {GROUP_ID = 'custom.group.id'ARTIFACT_ID = 'artifactid'
}android {compileSdkVersion 25buildToolsVersion "25.0.0"compileOptions {kotlinOptions.freeCompilerArgs += ['-module-name', "$GROUP_ID.$ARTIFACT_ID"]}defaultConfig {...}buildTypes {...}
}

官方已知问题

融合库是一个新插件,我们正在解决一些已知问题,以实现所有用例。

  • 合并的 AAR 中未包含 lint.jar 文件
  • 向其他 .aar 文件添加文件依赖项
  • 不支持合并 RenderScript 和 Prefab 工件

期待官方进一步完善。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85754.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85754.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/85754.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VR看房:重塑房地产行业生态的技术革命

在科技浪潮的席卷下,虚拟现实(VR)技术正深刻重塑房地产行业格局。VR看房这一创新模式的兴起,打破了传统看房的诸多限制,从根本上变革了购房者的看房体验,也为房地产企业的运营带来全新契机与挑战。 一、VR…

vscode+react+ESLint解决不引入组件,vscode不会报错的问题

解决不引入组件&#xff0c;vscode不会报错的问题 routes.jsx 全部代码如下 export const routes [{path:"/",element:<Home/>} ]在项目根目录下新建个 eslint.config.js 加入下面的代码&#xff0c;要保证node_modules里安装了 eslint-plugin-react&a…

Android制作AAR包并混淆后加载调用

为将部分算法代码封装为AAR包供其他项目调用&#xff0c;我基于零经验的情况搭建了一个Demo进行功能验证&#xff0c;在此记录流程以备后续参考。 1、新建一个Android Project&#xff0c;选择No Activity 2、创建 MyClasses 类用于封装相关代码 3、创建taar包并在其中定义MyAl…

常见应用层协议介绍

在计算机网络中,应用层协议是 OSI 模型中的最高层,负责为用户提供直接的网络服务。 一、基于TCP的协议 应用层协议端口号基于的传输层协议关键特性HTTP80TCP无状态、明文传输HTTPS443TCP (TLS加密)HTTP+SSL/TLS加密FTP20(数据)/21(控制)TCP双通道传输、支持认证SSH22TCP加密替…

分享两个可以一键生成sql server数据库 html格式巡检报告的脚本

方法一&#xff1a;使用sqlcmd C:\>sqlcmd -S LAPTOP-25D4U18P -i C:\sqlserver_check_html.sql -o C:\check\report.html -h-1 -f 65001sqlserver_check_html.sql代码如下&#xff1a; SET NOCOUNT ON; -- 修复错误的关键设置 SET QUOTED_IDENTIFIER ON; SET ANSI_NULLS…

AI Gateway 介绍

AI 网关和传统的 API 网关 API 网关发展 在最开始的时候&#xff0c;互联网通过电话线连接上网&#xff0c;通过“调制解调器&#xff08;Modem&#xff09;”将计算机信号和电话线信号“调制”与“调解”以实现上网功能。当今时代大多使用宽带上网&#xff0c;拨号上网已被逐…

15.3 LLaMA 3+LangChain实战:智能点餐Agent多轮对话设计落地,订单准确率提升90%!

LLaMA 3LangChain实战&#xff1a;智能点餐Agent多轮对话设计落地&#xff0c;订单准确率提升90%&#xff01; 关键词&#xff1a;多轮对话设计、场景化提示工程、LLaMA 3 微调、LangChain Agent、饭店点餐场景建模 饭店点餐场景的 Agent 方案设计 通过分层架构实现复杂场景对…

EXPLAIN优化 SQL示例

以下通过 6 个真实案例展示如何使用 EXPLAIN 优化 SQL&#xff0c;每个案例包含问题 SQL、EXPLAIN 分析、优化方案和优化后效果对比&#xff1a; 案例 1&#xff1a;全表扫描优化 (typeALL) 问题 SQL&#xff08;用户订单查询&#xff09;&#xff1a; SELECT * FROM orders …

「Linux文件及目录管理」通配符与文件名

「Linux文件及目录管理」通配符与文件名 知识点解析 通配符是Linux中用于匹配文件名的特殊字符,能高效处理批量文件操作。 常见通配符包括: *:匹配任意字符序列(包括空字符)touch a b ab a123 # 创建测试文件 ls a* # 匹配a, ab, a123?:精确匹配单个字符…

服务器配置记录

1. 获取服务器IP&#xff0c;用户&#xff0c;密码 2. 使用VS Code远程登录 下载ssh插件本地cmd执行ssh-keygen -t rsa -b 4096 -C "jt_windows"完成密钥生成。本地cmd执行type %USERPROFILE%\.ssh\id_rsa.pub查看密钥并复制。远程服务器执行以下命令&#xff1a; …

Windows 后渗透中可能会遇到的加密字符串分析

在 Windows 后渗透过程中&#xff0c;攻击者经常会遇到各种加密字符串或数据&#xff0c;这些数据通常用于存储敏感信息&#xff0c;如凭据、会话票据或配置数据。理解这些加密字符串的类型、加密机制、存储位置以及解密方法&#xff0c;对于权限提升、横向移动和持久化至关重要…

腾讯云本地专用集群CDC:混合云架构下的分布式云服务实践

摘要 在数字化转型加速的背景下&#xff0c;企业上云面临数据合规、低时延、运维复杂度等多重挑战。腾讯云本地专用集群CDC&#xff08;Cloud Dedicated Cluster&#xff09;通过融合公有云与本地IDC优势&#xff0c;提供近场云服务解决方案。本文基于IDC行业报告及技术实测数…

wpa_supplicant 源码学习

代码地址&#xff1a;git clone https://w1.fi/hostap.git 我目前学的的版本是 wpa_supplicant 2.12-devel-hostap_2_11-857-g54930b62b 五月份左右的提交&#xff0c;是较新的代码 想做白盒测试。最近开始学习 wpa_supplicant 这个工具。 自学了一个多月吧。 整理了一些代码跳…

[学习] C语言<string.h>中字符串函数全解析

C语言<string.h>中字符串函数全解析 在 C 语言中&#xff0c;字符串处理是程序开发中的重要组成部分。C 标准库 <string.h> 提供了一系列函数用于操作字符数组&#xff08;即字符串&#xff09;。这些函数以 str 开头&#xff0c;功能强大、使用广泛&#xff0c;掌…

OJ搭建:Judge0服务器、DeepSeek服务接入简介

序 各大OJ平台上有很多很好的资源&#xff0c;但作为自己的“备课本”总有各种不便&#xff0c;教学生时间久了总是有一些自己的题目和想法&#xff0c;这在教初学的学生时非常突出。所以&#xff0c;很多年前就搞了一些尝试&#xff0c;包括&#xff1a;在机房搭建ubuntu服务器…

Java的锁机制问题

锁机制 1.锁监视器 在 Java 并发编程中&#xff0c;锁监视器&#xff08;Monitor&#xff09; 是对象内部与锁关联的同步机制&#xff0c;用于控制多线程对共享资源的访问。以下是核心要点&#xff1a; &#x1f512; 监视器的核心组成 独占区&#xff08;Ownership&#xff…

老凤祥的AI智能眼镜:让智慧更近生活

在科技进步的潮流中,人工智能技术不断为我们的生活增添色彩。近日,有关字节跳动旗下的火山引擎与中国珠宝品牌老凤祥合作开发 AI 智能眼镜的消息引发了广泛关注。这款与众不同的眼镜因其独特的功能及技术支持,已经在业内引起了极大反响。 AI眼镜:老年群体的智能好帮手 根…

Kotlin 中为什么没有静态变量和静态方法—不用static?

Kotlin 的设计核心是&#xff1a; 一切皆对象&#xff1a;消除 static 的「非对象」特性&#xff0c;用 companion&#xff08;对象&#xff09;和顶层函数&#xff08;包级对象&#xff09;替代&#xff0c;让代码更统一。避免全局状态滥用&#xff1a;static 成员是全局可见…

VSCode性能调优:从卡顿到丝滑的终极方案

⚡ 核心价值 "这套配置使某金融核心系统VS Code内存占用从8GB降至1.2GB,加载速度提升15倍" —— 2024某银行效能优化报告 🧩 性能瓶颈拆解 一、百万行项目优化方案 🚀 黄金配置参数 // settings.json(核弹级优化) {"files.watcherExclude": {"…

以云织梦,渡数济世:辉瑞与亚马逊云科技共谱医药新乐章

胖头陀科技 编辑&#xff1a;沐由 【导读】“用合规的数据来帮助患者&#xff0c;成为患者回归健康的一味新药。”当下&#xff0c;在数字洪流的浪潮中&#xff0c;这味“良药”正沿着云和AI的脉络&#xff0c;奔向有需求的千家万户…… 如果说到Pfizer&#xff0c;估计十个人…