<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
現在App開發元件化技術已是常態,有很多的功能模組都被抽出來成為一個個元件供給開發者使用。為了開發者使用,這些元件都會被打包,就和java中的庫一樣。在java中,一個模組可以被打包為Jar包,而在Android中,不僅僅有java檔案,還有一些其他的資原始檔,所以就出現了AAR檔案(一種打包格式),本文通過一個demo來介紹如何打包一個Library檔案,生成AAR。
aar一種壓縮格式(打包的Library),相當於Android裡面的Jar包,不過裡面可以包含Android相關的一些資源,比如說:layout, drawable等res資源。
包括生成和使用兩大部分,話不多說,讓我們開始吧。
首先我們建立一個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上去,或者在設定檔案輸出位置的時候,直接設定為遠端程式碼倉庫的位置。
接下來,介紹一下如何在其他工程中使用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的異常
到此這篇關於Android開發之AAR檔案的生成與使用步驟的文章就介紹到這了,更多相關AAR檔案生成使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45