Android插件化之Small第二彈

1.公共庫插件

在Small框架中一般可以將插件分為業(yè)務(wù)插件和公共庫插件荸型,一般情況下,公共庫插件module name的命名方式是lib.挎扰,對(duì)應(yīng)的package name為.lib*氓轰。這是small推薦的命名方式峰伙,這樣就不用做其他額外配置了,然后只要在宿主module的bundle.json中配置聲明就能正常工作了程帕。

{
      "pkg": "com.example.liblogic"
}

因?yàn)檫@只是一個(gè)公共庫插件千扶,所有不需要配置uri料祠。為了開發(fā)階段的方便,業(yè)務(wù)插件依賴公共庫插件的依賴關(guān)系還是要配置的澎羞,否則會(huì)找不到對(duì)應(yīng)的類髓绽,但是在small打包時(shí),這個(gè)依賴關(guān)系時(shí)無用的妆绞,就是說就算module間的依賴關(guān)系不配置顺呕,最終打包出來的程序一樣能正常運(yùn)行。

有時(shí)因?yàn)橐恍┨厥馇闆r括饶,公共庫的命名不能用small推薦的方式株茶,那么就要做一些特殊的配置。在整個(gè)項(xiàng)目的build.gradle中添加配置如下图焰,

small {
    aarVersion = '1.2.0-alpha6'
    buildToAssets = false
    strictSplitResources = true
    bundles 'lib','logic2'
}

上面是small的DSL語言启盛,其中bundles這個(gè)方法就是用來聲明插件,上面就是聲明了logic2這個(gè)module是一個(gè)lib(公共庫插件類型)的插件技羔。
然后在bundle.json中再聲明如下

{
      "pkg": "com.example.logic2",
      "type": "lib"
    }

這樣就可以正常使用logic2這個(gè)公共庫插件了僵闯。最后我們編譯一下,就能看到那個(gè)熟悉的表格

QQ20170719-154620.png

2.Small進(jìn)階知識(shí)

1.Small DSL

DSL 即 Domain Specific Language藤滥,領(lǐng)域?qū)S谜Z言鳖粟。Small也有自己的一套標(biāo)準(zhǔn),上小節(jié)已經(jīng)使用過了拙绊。因?yàn)閷傩苑椒ú⒉欢嘞蛲迹行┮膊皇潜仨氁渲玫模圆⒉凰汶y标沪。不過這里有個(gè)坑榄攀,Small DSL的語法會(huì)根據(jù)gradle-small的版本變化而變化,比如官網(wǎng)介紹strictSplicResources
這個(gè)屬性其實(shí)并沒有金句,真正的屬性名稱叫做strictSplitResources航攒,就類似這樣的問題,那怎么辦呢趴梢?開源項(xiàng)目嘛漠畜,去github主頁上看源碼...

Small/Android/DevSample/buildSrc/src/main/groovy/net/wequick/gradle/RootExtension.groovy

RootExtension.groovy這個(gè)文件定義了Small DSL的語法。

2.插件路由

關(guān)于插件路由坞靶,就是bundle.json中的配置信息憔狞。之前我們配置一個(gè)業(yè)務(wù)插件只配置了uri和package,這個(gè)情況下彰阴,我們根據(jù)uri只會(huì)打開對(duì)應(yīng)業(yè)務(wù)插件中被定義了launch的activity瘾敢,有時(shí)會(huì)業(yè)務(wù)需求要打開這個(gè)module中的另外一個(gè)activity,這種情況下,bundle.json需要這么配置

{
      "uri": "alarmbox",
      "pkg": "com.example.appalarmbox",
      "rules":{
        "other":"Other"
      }
    }

這會(huì)比一般情況多設(shè)置一個(gè)rules簇抵。在這個(gè)module的主包下有一個(gè)OtherActivity庆杜,我們會(huì)根據(jù)“alarmbox/other”這個(gè)uri去啟動(dòng)OtherActivity。關(guān)于參數(shù)問題碟摆,在一般android開發(fā)中Activity之間進(jìn)行跳轉(zhuǎn)通過Intent晃财,Intent是可以帶參數(shù)的,那么在Small中我們這么傳參數(shù)呢典蜕?其實(shí)很簡(jiǎn)單断盛,就跟網(wǎng)頁的傳參方式一樣,只需要在uri后面帶上就行愉舔。

Small.openUri(uri+"?id=1&title=sdk",MainActivity.this);

那么目標(biāo)Activity怎么獲雀置汀?

Uri uri = Small.getUri(this);
        Log.i("info",uri.toString());
        String id = uri.getQueryParameter("id");
        String title = uri.getQueryParameter("title");
        Log.i("info","id="+id+",title="+title);

3.自定義資源ID分段

Small在整合插件資源的過程轩缤,為避免資源ID沖突命迈,需要為每個(gè)插件分配一個(gè)ID段。我們知道默認(rèn)程序的ID段為 0x7f火的。由于系統(tǒng)使用了 0x00壶愤,0x01,0x02卫玖。因此插件允許的范圍在 [0x03, 0x7e] 之間。
但是有些特殊情況踊淳,比如一些特殊機(jī)型的系統(tǒng)會(huì)占用某個(gè)內(nèi)存假瞬,那么就會(huì)產(chǎn)生異常,這種情況下就需要對(duì)內(nèi)存分配地址重新調(diào)整迂尝。

QQ20170719-164534.png

這是我們不做任何配置的編譯結(jié)果脱茉。我們?cè)趌ogic2這個(gè)modlue的gradle.build中添加

ext{
    packageId = 0x88
}

然后再編譯下發(fā)現(xiàn)logic2這個(gè)module分配的id首地址變成了0x88,如圖

QQ20170719-165007.png

4.其他

關(guān)于Small進(jìn)階還有編譯選項(xiàng)垄开,宿主分身模塊的方面問題琴许,這個(gè)暫時(shí)在項(xiàng)目中沒有用到,本著“不使用溉躲,無發(fā)言權(quán)”的原則榜田,下次用到再總結(jié)。

3.總結(jié)

關(guān)于Small的基礎(chǔ)研究將告一段落锻梳,下階段將進(jìn)行實(shí)際項(xiàng)目的改造工作箭券,一定會(huì)遇到不少坑,到時(shí)會(huì)和大家進(jìn)行分享疑枯。謝謝辩块,再見!

Demo地址:https://github.com/loubinfeng2013/SmallProject

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市废亭,隨后出現(xiàn)的幾起案子国章,更是在濱河造成了極大的恐慌,老刑警劉巖豆村,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件液兽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡你画,警方通過查閱死者的電腦和手機(jī)抵碟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坏匪,“玉大人拟逮,你說我怎么就攤上這事∈首遥” “怎么了敦迄?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)凭迹。 經(jīng)常有香客問我罚屋,道長(zhǎng),這世上最難降的妖魔是什么嗅绸? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任脾猛,我火速辦了婚禮,結(jié)果婚禮上鱼鸠,老公的妹妹穿的比我還像新娘猛拴。我一直安慰自己,他們只是感情好蚀狰,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布愉昆。 她就那樣靜靜地躺著,像睡著了一般麻蹋。 火紅的嫁衣襯著肌膚如雪跛溉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天扮授,我揣著相機(jī)與錄音芳室,去河邊找鬼。 笑死刹勃,一個(gè)胖子當(dāng)著我的面吹牛渤愁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播深夯,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼抖格,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼诺苹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起雹拄,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤收奔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后滓玖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坪哄,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年势篡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了翩肌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡禁悠,死狀恐怖念祭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碍侦,我是刑警寧澤粱坤,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站瓷产,受9級(jí)特大地震影響站玄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜濒旦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一株旷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尔邓,春花似錦晾剖、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沈撞。三九已至慷荔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缠俺,已是汗流浹背显晶。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壹士,地道東北人磷雇。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像躏救,于是被迫代替她去往敵國和親唯笙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子螟蒸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

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

  • 1.框架的選擇:本次選擇的插件化框架在經(jīng)過數(shù)次比較之后選擇了國產(chǎn)大神開發(fā)的目前在市場(chǎng)上較為流行的small插件化框...
    鳳天凌閱讀 3,530評(píng)論 8 11
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)崩掘,斷路器七嫌,智...
    卡卡羅2017閱讀 134,697評(píng)論 18 139
  • 導(dǎo)讀如果你沒有耐心,這篇文章對(duì)你來說可能是沉重的負(fù)擔(dān)苞慢,你可以直接頁內(nèi)搜索“尾聲”诵原,那里省略了階梯過程,直接是標(biāo)準(zhǔn)答...
    青藍(lán)白閱讀 1,345評(píng)論 0 5
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,283評(píng)論 25 707
  • Ruthrough閱讀 152評(píng)論 0 0