第3章 仿微信".api"化 實(shí)現(xiàn)原理(下)

導(dǎo)航

第3章 組件聲明式編程 仿微信".api"化(上)
第3章 仿微信".api"化 實(shí)現(xiàn)原理(下)

1、思考路徑

將原本下沉到base模塊的通用性不高的代碼歪泳,被重新申領(lǐng)到各個(gè)業(yè)務(wù)模塊渺杉,運(yùn)行時(shí)動(dòng)態(tài)放入到base模塊占业,在項(xiàng)目不斷擴(kuò)大時(shí)甸鸟,避免了base在后期開發(fā)時(shí)急速膨脹撇贺,約束好代碼邊界

反復(fù)參考微信Android模塊化架構(gòu)重構(gòu)實(shí)踐思想,忽然有一個(gè)靈感司志,“.api”文件是java JVM不識(shí)別的甜紫,可不可以在編譯之前降宅,將這些".api"文件變成系統(tǒng)可識(shí)別的。weixinapi囚霸,是這個(gè)插件由來的原因

2钉鸯、代碼實(shí)現(xiàn)的核心邏輯

1、將項(xiàng)目中所有module中".api"文件拷貝至指定ApiModule
2邮辽、因?yàn)閖ava jvm不識(shí)別".api"文件,將ApiModule中“.api”文件后綴改為".java"
3贸营、同理吨述,將原來所有module中".api"文件編譯時(shí)移除使用(exclude)
4、清理ApiModule中空文件夾钞脂,使該項(xiàng)目顯得更加清晰

3揣云、示例核心代碼 gradle腳本編寫

1、刪除api_module中所有java代碼 做項(xiàng)目初始化

task cleanApiLib() {
    delete project.rootProject.project(':module_api').projectDir.path + "/src/main/java"
}

2冰啃、api文件拷貝指定api_module ,且文件后綴改為".java"

task copyApiForCommLib(type: Copy) {

    group 'api'
    //遍歷所有項(xiàng)目 將api文件
    for (Project mProject : project.rootProject.getAllprojects()) {
        println(mProject.projectDir.path + "/src/main/java")
        from(mProject.projectDir.path + "/src/main/java") {
            include '**/**.api'
        }
    }

    println(project.rootProject.project(':module_api').projectDir.path + "/src/main/java")
    into file(project.rootProject.project(':module_api').projectDir.path + "/src/main/java")

    //將".api"改名為".java"
    rename { String filename ->
        int index = filename.indexOf(".api")
        String name = filename[0..index] + "java"
        return name
    }

}

3邓夕、api_module空文件夾清理

task clearApiEmptyDir() {
    String filePath = project.rootProject.project(':module_api').projectDir.path + "/src/main/java"
    println("show all filePath:" + filePath)
    clear(new File(filePath))
}

public static void clear(File dir) {
    File[] dirs = dir.listFiles()
    for (File file : dirs) {
        if (file.isDirectory()) {
            clear(file)
        }
    }

    if (dir.isDirectory() && dir.delete())
        println(dir.name + "清理成功")

}

4、項(xiàng)目編譯時(shí)移除原有module中“.api”文件

    //刪除api文件
    sourceSets {
        main {
            java {
                exclude('**/**.api')
            }
        }
    }
4阎毅、 采用groovy編寫weixinApi插件

本插件采用groovy編寫焚刚,難點(diǎn)在中間的一些語法差異,和細(xì)節(jié)優(yōu)化扇调,請(qǐng)大家給我一個(gè)star矿咕,
主要考慮三點(diǎn):

  • 1、有利于開發(fā)者用戶快速集成
  • 2狼钮、減少不必要gradle腳本碳柱,干擾到用戶,重點(diǎn)在于業(yè)務(wù)
  • 3熬芜、增強(qiáng)weixinapi通用性

groovy 編寫其中有很多技術(shù)難點(diǎn)莲镣,想要學(xué)習(xí)的朋友,可以我寫的插件源碼component/weixinApi

5涎拉、喜歡的朋友們記得給我的項(xiàng)目一個(gè)star

https://github.com/yinlingchaoliu/AndroidComponent
具體代碼位置去".api"插件
component/weixinApi

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瑞侮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子曼库,更是在濱河造成了極大的恐慌区岗,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毁枯,死亡現(xiàn)場(chǎng)離奇詭異慈缔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)种玛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門藐鹤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓤檐,“玉大人,你說我怎么就攤上這事娱节∧域龋” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵肄满,是天一觀的道長(zhǎng)谴古。 經(jīng)常有香客問我,道長(zhǎng)稠歉,這世上最難降的妖魔是什么掰担? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮怒炸,結(jié)果婚禮上带饱,老公的妹妹穿的比我還像新娘。我一直安慰自己阅羹,他們只是感情好勺疼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捏鱼,像睡著了一般执庐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上导梆,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天耕肩,我揣著相機(jī)與錄音,去河邊找鬼问潭。 笑死猿诸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的狡忙。 我是一名探鬼主播梳虽,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼灾茁!你這毒婦竟也來了窜觉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤北专,失蹤者是張志新(化名)和其女友劉穎禀挫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拓颓,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡语婴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砰左。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匿醒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缠导,到底是詐尸還是另有隱情廉羔,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布僻造,位于F島的核電站憋他,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏髓削。R本人自食惡果不足惜举瑰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔬螟。 院中可真熱鬧,春花似錦汽畴、人聲如沸旧巾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲁猩。三九已至,卻和暖如春罢坝,著一層夾襖步出監(jiān)牢的瞬間廓握,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工嘁酿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隙券,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓闹司,卻偏偏與公主長(zhǎng)得像娱仔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子游桩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353