安卓官方版fat-aar:使用Fused Library將多個Android庫發布為一個庫

安卓官方版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;估計十個人…