網站首頁 編程語言 正文
前言
現在App開發組件化技術已是常態,有很多的功能模塊都被抽出來成為一個個組件供給開發者使用。為了開發者使用,這些組件都會被打包,就和java中的庫一樣。在java中,一個模塊可以被打包為Jar包,而在Android中,不僅僅有java文件,還有一些其他的資源文件,所以就出現了AAR文件(一種打包格式),本文通過一個demo來介紹如何打包一個Library文件,生成AAR。
一、AAR是什么?
aar一種壓縮格式(打包的Library),相當于Android里面的Jar包,不過里面可以包含Android相關的一些資源,比如說:layout, drawable等res資源。
二、使用步驟
包括生成和使用兩大部分,話不多說,讓我們開始吧。
1.生成AAR
首先我們創建一個Android Project,然后在里面new一個Library,這里我們就使用它默認的名字吧。
然后就會生成這樣的一個Library,我們今天的目標就是在這個Library實現一些功能,然后打包成AAR文件,可以提供給其他工程調用。
在這個Library中,我們就寫一個叫DoSomething的類,然后里面有一個printSomething的方法,這里我使用的語言是Kotlin。
package com.example.mylibrary
class DoSomething {
public fun printSomething(){
println("你好,你想要輸出一些東西!")
}
}
做完這一切準備工作,就要開始打包了!我是直接在當前Library目錄下的build.gradle文件中,添加的如下代碼。當然了,也可以自己重新創建一個***.gradle文件,然后在build.gradle里面去調用(apply {‘***.gradle’}),添加如下代碼:
apply plugin: 'maven-publish'
afterEvaluate {
publishing {
publications {
debug(MavenPublication) {
// Applies the component for the debug build variant.
from components.debug
groupId = 'com.gloomy'
artifactId = 'myLibrary'
version = '1.0.0'
}
}
publishing {
repositories {
maven {
// change to point to your repo, e.g. http://my.org/repo
url = "file:///Users\\******\\Desktop\\AndroidStudy\\AAR"
}
}
}
}
}
在以上代碼中,使用了maven-publish插件,之前我看網上也有很多使用maven插件的,但是現在新版本的AS里已經使用不了了,大家要注意!maven-publish的更多使用,可以去官網了解一下(https://developer.android.com/studio/build/maven-publish-plugin?hl=zh-cn#kts)。其中debug表示是一個發布渠道,你可以取任何名字,而在這個閉包中的groupId,artifactId,version分別表示公司的域名,項目名稱以及項目版本號。分別對應生成的aar名稱中的這些。
然后再往下,repositories閉包里面寫的是我們想要輸出AAR文件的位置,這里我們先生成到本地。Synchronize以下,點開右側的Gradle文件夾,雙擊publish就開始生成我們的AAR文件了。
如果沒有Tasks文件,需要到Preference里面去,把Gradle設置一下,去掉這個勾勾就好了。
最后在我們指定的路徑里可以看到我們已經打包好的AAR文件了,如果我們需要打包到遠程代碼倉庫上,可以將本地的生成好的AAR使用git,push上去,或者在設置文件輸出位置的時候,直接設置為遠程代碼倉庫的位置。
2.AAR使用
接下來,介紹一下如何在其他工程中使用AAR文件,使用AAR有好幾種方式,這里介紹一種靈活性比較高的方式。首先在根目錄下的build.gradle里面添加如下代碼,其中那個url就是我們存放AAR文件的位置,不管是本地的還是遠程代碼倉庫的都可以。
buildscript {
repositories {
google()
mavenCentral()
maven {url "file:///Users\\*****\\Desktop\\AndroidStudy\\AAR"}
}
}
allprojects {
repositories {
google()
mavenCentral()
maven {url "file://Users\\*****\\Desktop\\AndroidStudy\\AAR"}
}
}
如果這個時候Synchronize失敗了,要注意去settings.gradle文件里面看一下,要保證兩邊的代碼倉庫設置一致,另外,需要把repositoriesMode設置為RepositoriesMode.PREFER_SETTINGS(好像只有新版本的AS里面有這些問題,老版本沒有)。
這時候就可以去我們app模塊的build.gradle里面去聲明依賴了, 這里可以看到我們的依賴名稱就是由之前設置的groupId,artifactId,version組成的,如果我們在之前的庫上進行了修改,只需要將其打包的版本號進行修改,然后在這里也隨之修改就可以了,非常的方便!
implementation 'com.gloomy:myLibrary:1.0.0'
聲明好依賴后,我們就可以來玩一把了,看看之前打包好的庫到底能不能用,來到MainActivity里添加如下代碼,然后運行。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val d = DoSomething()
d.printSomething()
}
}
最后在Logcat里面可以看到,我們的函數調用成功了!
附:注意事項
1.build–>Make Moudle app 不同as版本會生成app-debug.aar,用作調試使用看看log日志啥的。
2.Gradle界面-點擊當前項目-點擊tasks-點擊build-雙擊assembleRelease生成一個app-release.aar提供開發者使用。
3. 主項目需要依賴AAR中所依賴的遠程庫,否則會出現ClassNotFound異常
這里也許某個依賴庫你們的版本會發生沖突,這就需要你們協調了
4.資源命名最好統統加上你的項目名字前綴,比如圖片資源、string、color、dimens、layout等等,反正res目錄下所有文件最好都使用統一的加前綴命名,防止跟宿主app下的資源重復,因為aar引用跟源碼引用起到的效果一樣一樣的,所有很容易出現資源重復引用的問題,所以加上前綴非常有必要。
5.如果該aar包里面有微信支付,分享等第三方庫,你要在主工程中使用,要記得在gradle里面替換applicationId,或者用你主工程的包名和key去獲取第三方操作的key和id
以分享為例,如果你清單文件中的分享KEY與主項目中的build gradle文件中的分享KEY不同的話,就會包清單文件異常的。
6.butterknife需要統一用8.4.0以上的版本,不然報錯 ;依我的建議,最好不用,否則有你好受的哈!
7. 如果在aar的MyAppliction里面使用了類的管理器,那么在打包成aar的時候需要將代碼抽出來做個獨立的類管理器,記住一點,打包成aar之后所有和application有關的東西都要檢查替換,避免出現空指針異常。
8. AAR模塊用butterknife需要把資源R改為R2(批量替換)
9. 布局文件不要重名,否則會報找不到Id的異常
總結
原文鏈接:https://blog.csdn.net/qq_42788340/article/details/125190519
相關推薦
- 2022-04-25 ASP.NET?Core中Razor頁面與MVC區別介紹_實用技巧
- 2022-05-20 Spring Boot 整合流程引擎 Flowable,so easy
- 2022-07-29 Golang學習之反射機制的用法詳解_Golang
- 2023-07-06 css實現高亮模式和黑暗模式
- 2022-10-06 Android?Activity啟動流程刨析_Android
- 2022-04-30 DataGridView凍結列或行、列順序調整、操作行頭列頭標題的方法_C#教程
- 2023-02-07 Golang中結構體映射mapstructure庫深入詳解_Golang
- 2022-11-21 初識Golang?Mutex互斥鎖的使用_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支