Android AAR開發(fā)打包方法赡磅、命名、依賴等相關(guān)注意點(diǎn)

前言:

aar包中包含了類似APPres下的一切資源腾供,實(shí)際上相當(dāng)于一個(gè)module直接依賴了一個(gè)工程module庫(kù)仆邓,只是我們將這個(gè)工程module庫(kù)打包成為了一個(gè)aar文件方便直接引用鲜滩,而不是提供真正的源代碼,而我們?cè)谶M(jìn)行開發(fā)aar的目的是為了將其作為一個(gè)庫(kù)提供給真正的application使用节值,所以aar自身工程在開發(fā)過程中不會(huì)也不可能引用需要自身被引用的工程中徙硅,說的有點(diǎn)繞。但是在實(shí)際開發(fā)中可能存在就是aar作為開發(fā)的某個(gè)模塊的功能搞疗,比如直接屬于啟動(dòng)的主界面的某個(gè)Fragment嗓蘑,并且該Fragment包含了很多功能,該功能里面點(diǎn)擊某個(gè)view則進(jìn)入到一個(gè)WebView網(wǎng)頁(yè)界面匿乃,進(jìn)入網(wǎng)頁(yè)界面需要判斷該APP是否登錄桩皿,那么我們作為一個(gè)aar工程實(shí)際上是拿取不到該APP登錄的邏輯的,所以就存在了一個(gè)環(huán)境模擬的思路幢炸。這個(gè)時(shí)候就涉及到運(yùn)行時(shí)和編譯時(shí)泄隔。我們?cè)?code>aar中調(diào)用APP中的某個(gè)方法時(shí)不需要去具體實(shí)現(xiàn),只需要模擬該環(huán)境也即:包宛徊、類佛嬉、方法/屬性并調(diào)用,實(shí)際上只需要編譯時(shí)通過即可闸天,而真正的運(yùn)行時(shí)則實(shí)際上調(diào)用的是APP中的真正方法進(jìn)行判斷暖呕。
再者當(dāng)我們的aar包需要依賴比如百度地圖時(shí),也采用只參與編譯而非運(yùn)行時(shí)依賴苞氮,因?yàn)榘俣鹊?code>ak之類的只能一個(gè)值湾揽,而我們自行開發(fā)時(shí)需要測(cè)試,所以實(shí)際上我們?cè)撓鄳?yīng)的key該配置還得配置笼吟,便于開發(fā)库物,實(shí)際上提供aar時(shí)屬于運(yùn)行時(shí)給APP作為第三方庫(kù)使用,是不會(huì)影響APP真正的使用的赞厕。
如果APP中艳狐,比如下拉刷新定硝,是屬于自定義的下拉刷新的 方式皿桑,而我們的aar中也用到了該下拉刷新那么也需要模擬相同環(huán)境進(jìn)行調(diào)用。那么我們開發(fā)庫(kù)中可以新建相應(yīng)的一個(gè)依賴庫(kù)模擬相同的環(huán)境的下拉刷新路徑蔬啡,如想要保持相同風(fēng)格诲侮,則可以暫時(shí)先由第三方提供測(cè)試,最終實(shí)際上運(yùn)行時(shí)的程序調(diào)用的還是APP中的庫(kù).

如何打包AAR:

方式一:IDE工具界面直接打包
image.png
方式二:使用命令行

Terminal下使用gradlew assembleRelease 命令

image.png

image.png

AAR 包下的所有資源文件命名問題

application中的res下的資源名稱很有可能會(huì)和依賴的aar庫(kù)中的res資源名稱相同箱蟆,引發(fā)資源重復(fù)引用沟绪。
處理方式為在打包aar庫(kù)文件時(shí),將資源名稱以自己獨(dú)有的格式命名空猜,避免常規(guī)命名沖突绽慈,比如所有的資源文件添加以公司省略英文字母作為命名前綴恨旱。

AAR中的依賴方式

所以我們所有的這一系列的依賴方式都為:compileOnly

  • 在編譯時(shí)所需的依賴關(guān)系,但在運(yùn)行時(shí)不需要例如僅源代碼注解或注釋處理器;
  • 在編譯時(shí)所需的依賴關(guān)系坝疼,但在運(yùn)行時(shí)僅在使用某些功能時(shí)才需要搜贤,也稱為可選依賴項(xiàng);
  • 在編譯時(shí)需要其API,但其實(shí)現(xiàn)由消費(fèi)庫(kù)钝凶,應(yīng)用程序或運(yùn)行時(shí)環(huán)境提供的依賴關(guān)系仪芒。
  • 僅編譯依賴關(guān)系與常規(guī) compile、implementation依賴關(guān)系明顯不同耕陷。它們不包含在運(yùn)行時(shí)類路徑中掂名,它們是非傳遞性的,意味著它們不包括在依賴項(xiàng)目中哟沫。當(dāng)使用 Gradle項(xiàng)目依賴關(guān)系以及發(fā)布到MavenIvy存儲(chǔ)庫(kù)時(shí)饺蔑,這一點(diǎn)是正確的。在后一種情況下嗜诀,只有從已發(fā)布的元數(shù)據(jù)中省略編譯依賴關(guān)系膀钠。

android3.0+依賴方式:

image.png

Android studio3.0+中,compile依賴關(guān)系已被棄用裹虫,被implementationapi替代肿嘲,providedcompile only替代,apkruntime only替代筑公,剩下的看名字就知道了雳窟。
下面我們來看看2.x和3.x區(qū)別

  • implementation:只能在內(nèi)部使用此模塊,比如我在一個(gè)libiary中使用implementation依賴了gson庫(kù)匣屡,然后我的主項(xiàng)目依賴了libiary封救,那么,我的主項(xiàng)目就無(wú)法訪問gson庫(kù)中的方法捣作。這樣的好處是編譯速度會(huì)加快誉结,推薦使用implementation的方式去依賴,如果你需要提供給外部訪問券躁,那么就使用api依賴即可

  • api(compile)
    這種是我們最常用的方式惩坑,使用該方式依賴的庫(kù)將會(huì)參與編譯和打包。
    當(dāng)我們依賴一些第三方的庫(kù)時(shí)也拜,可能會(huì)遇到com.android.support沖突的問題以舒,就是因?yàn)殚_發(fā)者使用的compile依賴的com.android.support包,而他所依賴的包與我們本地所依賴的com.android.support包版本不一樣慢哈,所以就會(huì)報(bào)All com.android.support libraries must use the exact same version specification (mixing versions can lead to runtime crashes這個(gè)錯(cuò)誤蔓钟。

解決辦法可以看這篇博客:com.android.support沖突的解決辦法
解決方法(同樣的適用于其他的依賴沖突。)
1)修改自己項(xiàng)目中的com.android.support的版本號(hào)卵贱,與所依賴的庫(kù)版本號(hào)一致滥沫,但是當(dāng)我們依賴的庫(kù)中的com.android.support版本號(hào)有好幾個(gè)版本就不行了侣集。(不推薦)

2)推薦這種方法,如果發(fā)生沖突了兰绣,依賴第三方庫(kù)時(shí)候排除掉對(duì)com.android.support包的依賴肚吏,這樣自己的項(xiàng)目隨便依賴什么版本都可以。

exclude group:表示只要包含com.android.support的都排除 

api("com.afollestad.material-dialogs:core:0.9.5.0") {
        exclude group: 'com.android.support'
    }

module:刪排除group中的指定module
 api("com.afollestad.material-dialogs:core:0.9.5.0") {
        exclude group: 'com.android.support', module: 'support-v13'
        exclude group: 'com.android.support', module: 'support-vector-drawable'
    }

  • compileOnly(provided)
    只在編譯時(shí)有效狭魂,不會(huì)參與打包
    可以在自己的moudle中使用該方式依賴一些比如com.android.support罚攀,gson這些使用者常用的庫(kù),避免沖突雌澄。

  • runtimeOnly(apk)
    只在生成apk的時(shí)候參與打包斋泄,編譯時(shí)不會(huì)參與,很少用镐牺。

  • testImplementation(testCompile)

  • testImplementation 只在單元測(cè)試代碼的編譯以及最終打包測(cè)試apk時(shí)有效炫掐。

  • debugImplementation(debugCompile)

  • debugImplementation只在debug模式的編譯和最終的debug apk打包時(shí)有效

  • releaseImplementation(releaseCompile)

  • releaseImplementation 僅僅針對(duì)Release 模式的編譯和最終的Release apk打包。

在我們自己創(chuàng)建library給別人使用時(shí)睬涧,如果需要依賴的話募胃,建議用compileOnly的方式依賴(android studio3.0中更改為compileOnly老版本為provided),這樣只會(huì)在編譯時(shí)有效畦浓,不會(huì)參與打包痹束。實(shí)際上調(diào)用的是APP中的功能。

如何使用AAR

 implementation project(':youaarlibrary')//既可以直接依賴開發(fā)
//compile(name: 'youaarlibrary-release', ext: 'aar')//也可以添加aar方式開發(fā)

https://blog.csdn.net/yuzhiqiang_1993/article/details/78214812

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末讶请,一起剝皮案震驚了整個(gè)濱河市祷嘶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌夺溢,老刑警劉巖论巍,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異风响,居然都是意外死亡嘉汰,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門状勤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鞋怀,“玉大人,你說我怎么就攤上這事荧降〗芋铮” “怎么了攒读?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵朵诫,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我薄扁,道長(zhǎng)剪返,這世上最難降的妖魔是什么废累? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮脱盲,結(jié)果婚禮上邑滨,老公的妹妹穿的比我還像新娘。我一直安慰自己钱反,他們只是感情好掖看,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著面哥,像睡著了一般哎壳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尚卫,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天归榕,我揣著相機(jī)與錄音,去河邊找鬼吱涉。 笑死刹泄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的怎爵。 我是一名探鬼主播特石,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鳖链!你這毒婦竟也來了县匠?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤撒轮,失蹤者是張志新(化名)和其女友劉穎乞旦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體题山,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兰粉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顶瞳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片玖姑。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖慨菱,靈堂內(nèi)的尸體忽然破棺而出焰络,到底是詐尸還是另有隱情,我是刑警寧澤符喝,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布闪彼,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏畏腕。R本人自食惡果不足惜缴川,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望描馅。 院中可真熱鬧把夸,春花似錦、人聲如沸铭污。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)矫废。三九已至绽快,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刁绒,已是汗流浹背闷营。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留知市,地道東北人傻盟。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嫂丙,于是被迫代替她去往敵國(guó)和親娘赴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,118評(píng)論 25 707
  • 用兩張圖告訴你跟啤,為什么你的 App 會(huì)卡頓? - Android - 掘金 Cover 有什么料诽表? 從這篇文章中你...
    hw1212閱讀 12,723評(píng)論 2 59
  • 如果寂寞已然成為了我很多年的常態(tài) 那么遇見你之后 我便真正開始了漫長(zhǎng)的孤獨(dú) 午后 圖書館 鳥鳴清朗 辟谷第一天 還...
    千言燈火閱讀 299評(píng)論 0 0
  • 大白和橘子認(rèn)識(shí)于大學(xué),她們相遇相知隅肥,算不上大學(xué)里最好的朋友竿奏,但也是好好好朋友系列了。 女生的友誼真的是...
    番茄土豆ni閱讀 236評(píng)論 0 0
  • 李先生腥放, 今天休假 在床上躺了一天 閉上眼 想象重逢后的我們 可是我卻無(wú)論...
    L離城閱讀 162評(píng)論 0 0