Android應(yīng)用Small組件化實(shí)例

Small插件化方案適用于將一個(gè)APK拆分為多個(gè)公共庫(kù)插件、業(yè)務(wù)模塊插件的場(chǎng)景。

  • 完美內(nèi)置所有插件支持內(nèi)置于宿主包中

  • 高度透明插件編碼、布局編寫(xiě)方式與獨(dú)立應(yīng)用開(kāi)發(fā)無(wú)異
    插件代碼調(diào)試與整包開(kāi)發(fā)無(wú)異

  • 極致剪裁對(duì)插件分離所有一切能分離的公共代碼、資源

  • 無(wú)縫鏈接通過(guò)設(shè)定URI,宿主、本地化應(yīng)用插件、本地化web插件、在線網(wǎng)頁(yè),以及任何自定義的插件之間能夠相互調(diào)起與傳遞參數(shù)

  • 跨平臺(tái)目前已支持AndroidiOS以及html5插件。并且三者之間可以通過(guò)同一套Javascript接口進(jìn)行通信。

工程build.gradle中引入small,目前已發(fā)布gradle插件1.0.0-beta7版本,small組件1.1.0-beta4.

buildscript {    
    ...
    dependencies {        
          classpath 'com.android.tools.build:gradle:2.1.2'        
          classpath 'net.wequick.tools.build:gradle-small:1.0.0-beta7'      
          .... 
    }
}
...
apply plugin: 'net.wequick.small'

small {    
      aarVersion = '1.1.0-beta4'
}

工程結(jié)構(gòu)包括宿主工程app,業(yè)務(wù)模塊插件app.*,以及l(fā)ib.*公共庫(kù)插件工程。如:

工程目錄結(jié)構(gòu)
  • 1.app 宿主工程
宿主工程結(jié)構(gòu)

宿主工程中僅僅應(yīng)用入口HostApp,啟動(dòng)首屏展示LoadingActivity(不包含任何網(wǎng)絡(luò)加載邏輯,廣告圖片加載邏輯放在業(yè)務(wù)插件app.launch中)。build.gradle中包含signingConfigs、buildTypes等,插件公共依賴可放到dependencies中,不會(huì)打包到插件中。

bundle.json

記得在assets中bundle.json文件配置插件包名和路由rules,否則small將找不到對(duì)應(yīng)插件。

  • 2.app.業(yè)務(wù)模塊*

業(yè)務(wù)模塊之間互相獨(dú)立,通過(guò)small來(lái)管理跳轉(zhuǎn)和fragment的獲取。業(yè)務(wù)模塊包含自己的APIService(網(wǎng)絡(luò)請(qǐng)求使用lib.net,底層是retroifit+okhttp)、UI(Activity、Fragment、View、Adapter)、Model、Application。

Small Activity跳轉(zhuǎn)

Small.openUri("main", LaunchActivity.this);

Small獲取Fragment

BaseFragment fragment = (BaseFragment)Small.createObject("fragment-v4", "community/community", MainActivity.this);
  • 3.lib.模塊*

lib模塊的引用最好在宿主工程中也保留一份,這樣不會(huì)打包到插件中,可以使最后只保留一份引用。Account也可以做成lib,供其他app插件調(diào)用。

lib.*模塊

lib.style中包含通用的動(dòng)畫(huà)、顏色、規(guī)格、尺寸、主題。

lib.utils放置一些通用help、utils,依賴style(dialog主題)。

lib.config 應(yīng)用的配置信息,版本號(hào)、包名、系統(tǒng)信息等。

lib.constant 暫時(shí)放置一些常量、枚舉、key、id等。

lib.analytics統(tǒng)計(jì)API

lib.net 網(wǎng)絡(luò)請(qǐng)求框架,retroifit+okhttp,處理token錯(cuò)誤等全局錯(cuò)誤。

lib.base放置Activity、Application、Fragment等的基類。

lib.router Small的uri特殊處理

  • 4.其他第三方模塊和aar

其他依賴最好通過(guò)私有maven倉(cāng)庫(kù)管理。

jni_plugin用來(lái)存放一些so文件,以及jni接口。

jsbridge--webview和native交互的一個(gè)庫(kù),參考
https://github.com/gzsll/WebViewJavascriptBridge

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容