Android應(yīng)用模板介紹

應(yīng)用模板代碼地址:https://github.com/thfhongfeng/AndroidAppTemplate
(可直接參考項目根目錄的readme文件)

特點:
  1. 模塊化開發(fā) ,支持MVC, MVP, MVVM架構(gòu);
  2. 依賴包統(tǒng)一管理,配置分離;
  3. 盡量做到第三方API可插拔化,與業(yè)務(wù)代碼分離;
項目目錄結(jié)構(gòu)圖:
項目目錄結(jié)構(gòu)圖.png
  1. tool模塊為公共模塊,與項目和業(yè)務(wù)無關(guān),主要是一些通用的工具類,控件類及組件。
  2. config模塊為配置模塊,該模塊與config_xxx.gradle中的配置項相配合, 主要進行項目的配置,比如:項目常量設(shè)置,項目模塊開關(guān)及業(yè)務(wù)功能開關(guān)等。
  3. router模塊為路由模塊,用于bundle模塊間的通信。
  4. base模塊為主體基礎(chǔ)模塊,該模塊放置了所有項目和業(yè)務(wù)通用基礎(chǔ)庫(與項目相關(guān),但不與具體業(yè)務(wù)相關(guān))。
  5. base_lib_immersionbar模塊為沉浸式狀態(tài)欄lib庫,base模塊中用到。
  6. app_welcome為入口模塊,用于App入口界面的啟動。主要包括loading界面(app初始數(shù)據(jù)的獲?。豪绨姹靖虑闆r等)和welcome界面。
  7. app為構(gòu)建模塊,主要用于項目初始化,構(gòu)建和打包,與具體業(yè)務(wù)無關(guān)。
    以上為項目必不可少的模塊,為項目的主體模塊。
    ——————————————————————
  8. bundle_xxx為常用基礎(chǔ)業(yè)務(wù)模塊,包括:bundle_main, bundle_login, bundle_user
  9. bundle_business_xxx為"xxx"具體業(yè)務(wù)模塊。
  10. xxx_lib_yyy為 "xxx"模塊對應(yīng)的lib庫"yyy"。
  11. db_server為本地數(shù)據(jù)庫模擬后臺數(shù)據(jù)服務(wù)器模塊(不需要搭架后臺數(shù)據(jù)服務(wù)就可以對模板功能進行調(diào)試驗證),為了調(diào)試和演示。
    以上模塊在自己的項目中均可刪除,其中bundle_business_mvc,bundle_business_mvp,bundle_business_mvvm為Demo性質(zhì)的模塊,主要用來引導(dǎo)如何使用這個架構(gòu)模板;db_server則是為了方便調(diào)試和演示;bundle_main,bundle_login,bundle_user根據(jù)自己的需求也可以集成到自己的項目中。
    ——————————————————————
tool模塊主要包說明:

access-----------------準(zhǔn)入條件封裝,已在基礎(chǔ)ui中封裝使用。
request----------------數(shù)據(jù)請求封裝(http,database)。
permission-----------EasyPermission的進一步封裝,已在基礎(chǔ)ui中封裝使用。
widget-----------------項目無關(guān)的自定義小控件集合(不設(shè)具體界面樣式)。
architecture----------編碼架構(gòu)封裝:mvc,mvp,mvvm(不設(shè)具體界面樣式)。
util----------------------項目無關(guān)的工具集合。
bean、exception---實體類及異常類集合。

base模塊主要包說明:

util----------------------項目相關(guān)而具體業(yè)務(wù)無關(guān)的工具集合,此工具集合與tool模塊的工具的主要區(qū)分依據(jù)是:是否與項目有關(guān)。tool中的工具類要求嚴(yán)格做到與項目無關(guān),是語言與數(shù)據(jù)處理級別的。
widget-----------------項目相關(guān)而具體業(yè)務(wù)無關(guān)的自定義小控件集合(有具體的通用的界面樣式)。
component-----------各種實用組件封裝。
recycler_view--------RecyclerView適配器的封裝。
architecture----------編碼架構(gòu)封裝:mvc,mvp,mvvm(有具體的通用的界面樣式)。
ui-----------------------通用Activity和fragment封裝,默認(rèn)android原生架構(gòu)方式(有具體的通用的界面樣式)。
db----------------------應(yīng)用通用數(shù)據(jù)庫(基于room),用于app的整體數(shù)據(jù)庫操作。

模塊多渠道客制化步驟:

分兩種渠道:common渠道為通用渠道(開發(fā)功能時的默認(rèn)渠道);其它渠道(huawei、小米等)
一、在src下建立不同渠道對應(yīng)的文件夾(如:common、huawei、xiaomi)。
二、修改模塊下的gradle:
a. defaultConfig閉包中添加:

        flavorDimensions "default"

b. android閉包中添加:

        productFlavors {
                common {

                }
                huawei {

                }
                xiaomi {

                }
            }

三、將模塊中渠道有差異化的實現(xiàn)代碼寫在對應(yīng)渠道文件夾中:
a. 差異化的資源文件,直接同名到各個渠道文件夾中(渠道中的同名資源文件會自動覆蓋掉main中的資源文件,從而實現(xiàn)渠道差異化);
b. 差異化的代碼文件則需放在common中進行開發(fā),然后拷貝到各個渠道文件夾中進行差異化開發(fā)(各個渠道文件保持路徑一致)。
渠道化文件夾說明:
main---主體源文件夾。所有渠道共有。
common---默認(rèn)渠道源文件夾,一般是差異化功能的全部默認(rèn)實現(xiàn)。
Xxx---各客制化渠道源文件夾,對應(yīng)不同渠道。為common的拷貝,并在此基礎(chǔ)上進行自己渠道的客制化。

編碼規(guī)范:
  1. bundle業(yè)務(wù)模塊所有的資源必須以bundle名小寫開頭,例如login模塊的xxx資源必須寫為"login_xxx"。
  2. bundle業(yè)務(wù)模塊所有的類建議以bundle名首字母大寫開頭,例如login模塊的類Xxx寫為"LoginXxx"。
  3. 所有bundle間的通信必須要統(tǒng)一使用router模塊進行。為了減少對業(yè)務(wù)模塊的污染,本項目并沒有按arouter的規(guī)范方式進行模塊間通信,而只是借助了其部分功能。
  4. 編碼時特別是編寫公共類庫時,請確認(rèn)該類庫的共性:
    a. 有項目共性,與具體業(yè)務(wù)無關(guān)的統(tǒng)一放在base模塊中。
    b. 無項目共性,與業(yè)務(wù)無關(guān)的的統(tǒng)一放在tool模塊中。
  5. 第三方類庫統(tǒng)一接口化編程,即定義項目要用到的接口,業(yè)務(wù)代碼統(tǒng)一使用接口調(diào)用,具體實現(xiàn)類才與第三方關(guān)聯(lián),做到業(yè)務(wù)代碼與第三方類庫分離。
  6. 模塊內(nèi)代碼架構(gòu)推薦使用MVVM架構(gòu)。
新建業(yè)務(wù)模塊注意事項:
  1. 業(yè)務(wù)模塊的Application類統(tǒng)一繼承base模塊的BaseApplication類。
  2. 業(yè)務(wù)模塊的Constants常量類統(tǒng)一繼承base模塊的BaseConstants類。
  3. 業(yè)務(wù)模塊的UrlConstants常量類統(tǒng)一繼承base模塊的BaseUrlConstants類。
  4. 業(yè)務(wù)模塊的SPKeyConstants常量類統(tǒng)一繼承base模塊的BaseSPKeyConstants類。
  5. 業(yè)務(wù)模塊arouter通信的搭建(結(jié)合arouter的通信方式說明文檔來理解):
    a. 模塊中編寫XxxRemote(可參考已有模塊,基本內(nèi)容都差不多)和XxxRemoteService類(通信方法寫在該類中,使用注解方式),用于向外部模塊提供統(tǒng)一的跨模塊服務(wù)。
    b. 模塊中編寫XxxClientManager(可參考已有模塊),用于統(tǒng)一調(diào)用外部模塊的跨模塊方法。
    c. router模塊中編寫通信命令常量類RouterXxxCommand,添加相關(guān)注釋(可參考已有模塊)。
    d. 模塊間通信使用方式:
    RouterManager.getInstance(xxxBundleKey).callYyCommand(Context context, final String commandName, final Bundle args, final IRouterCallback callback);
    該調(diào)用統(tǒng)一寫在XxxClientManager中
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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