您好,登錄后才能下訂單哦!
本篇內(nèi)容介紹了“Android開發(fā)之AAR文件如何生成與使用”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
aar一種壓縮格式(打包的Library),相當(dāng)于Android里面的Jar包,不過里面可以包含Android相關(guān)的一些資源,比如說:layout, drawable等res資源。
包括生成和使用兩大部分,話不多說,讓我們開始吧。
首先我們創(chuàng)建一個(gè)Android Project,然后在里面new一個(gè)Library,這里我們就使用它默認(rèn)的名字吧。
然后就會生成這樣的一個(gè)Library,我們今天的目標(biāo)就是在這個(gè)Library實(shí)現(xiàn)一些功能,然后打包成AAR文件,可以提供給其他工程調(diào)用。
在這個(gè)Library中,我們就寫一個(gè)叫DoSomething的類,然后里面有一個(gè)printSomething的方法,這里我使用的語言是Kotlin。
package com.example.mylibrary class DoSomething { public fun printSomething(){ println("你好,你想要輸出一些東西!") } }
做完這一切準(zhǔn)備工作,就要開始打包了!我是直接在當(dāng)前Library目錄下的build.gradle文件中,添加的如下代碼。當(dāng)然了,也可以自己重新創(chuàng)建一個(gè)***.gradle文件,然后在build.gradle里面去調(diào)用(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插件,之前我看網(wǎng)上也有很多使用maven插件的,但是現(xiàn)在新版本的AS里已經(jīng)使用不了了,大家要注意!maven-publish的更多使用,可以去官網(wǎng)了解一下。其中debug表示是一個(gè)發(fā)布渠道,你可以取任何名字,而在這個(gè)閉包中的groupId,artifactId,version分別表示公司的域名,項(xiàng)目名稱以及項(xiàng)目版本號。分別對應(yīng)生成的aar名稱中的這些。
然后再往下,repositories閉包里面寫的是我們想要輸出AAR文件的位置,這里我們先生成到本地。Synchronize以下,點(diǎn)開右側(cè)的Gradle文件夾,雙擊publish就開始生成我們的AAR文件了。
如果沒有Tasks文件,需要到Preference里面去,把Gradle設(shè)置一下,去掉這個(gè)勾勾就好了。
最后在我們指定的路徑里可以看到我們已經(jīng)打包好的AAR文件了,如果我們需要打包到遠(yuǎn)程代碼倉庫上,可以將本地的生成好的AAR使用git,push上去,或者在設(shè)置文件輸出位置的時(shí)候,直接設(shè)置為遠(yuǎn)程代碼倉庫的位置。
接下來,介紹一下如何在其他工程中使用AAR文件,使用AAR有好幾種方式,這里介紹一種靈活性比較高的方式。首先在根目錄下的build.gradle里面添加如下代碼,其中那個(gè)url就是我們存放AAR文件的位置,不管是本地的還是遠(yuǎn)程代碼倉庫的都可以。
buildscript { repositories { google() mavenCentral() maven {url "file:///Users\\*****\\Desktop\\AndroidStudy\\AAR"} } } allprojects { repositories { google() mavenCentral() maven {url "file://Users\\*****\\Desktop\\AndroidStudy\\AAR"} } }
如果這個(gè)時(shí)候Synchronize失敗了,要注意去settings.gradle文件里面看一下,要保證兩邊的代碼倉庫設(shè)置一致,另外,需要把repositoriesMode設(shè)置為RepositoriesMode.PREFER_SETTINGS(好像只有新版本的AS里面有這些問題,老版本沒有)。
這時(shí)候就可以去我們app模塊的build.gradle里面去聲明依賴了, 這里可以看到我們的依賴名稱就是由之前設(shè)置的groupId,artifactId,version組成的,如果我們在之前的庫上進(jìn)行了修改,只需要將其打包的版本號進(jìn)行修改,然后在這里也隨之修改就可以了,非常的方便!
implementation 'com.gloomy:myLibrary:1.0.0'
聲明好依賴后,我們就可以來玩一把了,看看之前打包好的庫到底能不能用,來到MainActivity里添加如下代碼,然后運(yùn)行。
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val d = DoSomething() d.printSomething() } }
最后在Logcat里面可以看到,我們的函數(shù)調(diào)用成功了!
1.build–>Make Moudle app 不同as版本會生成app-debug.aar,用作調(diào)試使用看看log日志啥的。
2.Gradle界面-點(diǎn)擊當(dāng)前項(xiàng)目-點(diǎn)擊tasks-點(diǎn)擊build-雙擊assembleRelease生成一個(gè)app-release.aar提供開發(fā)者使用。
3. 主項(xiàng)目需要依賴AAR中所依賴的遠(yuǎn)程庫,否則會出現(xiàn)ClassNotFound異常
這里也許某個(gè)依賴庫你們的版本會發(fā)生沖突,這就需要你們協(xié)調(diào)了
4.資源命名最好統(tǒng)統(tǒng)加上你的項(xiàng)目名字前綴,比如圖片資源、string、color、dimens、layout等等,反正res目錄下所有文件最好都使用統(tǒng)一的加前綴命名,防止跟宿主app下的資源重復(fù),因?yàn)閍ar引用跟源碼引用起到的效果一樣一樣的,所有很容易出現(xiàn)資源重復(fù)引用的問題,所以加上前綴非常有必要。
5.如果該aar包里面有微信支付,分享等第三方庫,你要在主工程中使用,要記得在gradle里面替換applicationId,或者用你主工程的包名和key去獲取第三方操作的key和id
以分享為例,如果你清單文件中的分享KEY與主項(xiàng)目中的build gradle文件中的分享KEY不同的話,就會包清單文件異常的。
6.butterknife需要統(tǒng)一用8.4.0以上的版本,不然報(bào)錯(cuò) ;依我的建議,最好不用,否則有你好受的哈!
7. 如果在aar的MyAppliction里面使用了類的管理器,那么在打包成aar的時(shí)候需要將代碼抽出來做個(gè)獨(dú)立的類管理器,記住一點(diǎn),打包成aar之后所有和application有關(guān)的東西都要檢查替換,避免出現(xiàn)空指針異常。
8. AAR模塊用butterknife需要把資源R改為R2(批量替換)
9. 布局文件不要重名,否則會報(bào)找不到Id的異常
“Android開發(fā)之AAR文件如何生成與使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。