日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

架构:Android 组件化开发

發布時間:2024/1/17 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 架构:Android 组件化开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

強烈推薦先閱讀這篇文章 Android 組件化最佳實踐

本文是閱讀實踐后的思考總結,更傾向實踐步驟。

組件化開發架構

組件化開發大體就是這樣的架構,最關鍵的是base 和 base_custom 組件內容的區別化。

這里涉及兩個概念 模塊化 和 組件化,這兩個本質上是一樣的,都是為了降低代碼耦合性,區別就在于內容,組件化都是單一功能的集合,模塊化就是獨立業務線的集合,其實我們都可以稱之為組件化。

組件化開發步驟

第一步:創建組件

File——>New——>New Moudle——>Phone & Tablet Moudle

創建后是一個工程,類似app,會默認創建好相關資源文件?!笜I務模塊首選」

File——>New——>New Moudle——>Android Library

創建后是一個moudle「組件首選」

第二步:編碼

編碼過程中需要注意的就是 資源和代碼的聚合,還是遵循 自己的事情自己做 的原則,降低耦合性。

  • 資源

    • 圖片資源 drawable,需要用到的放在自己目錄下,類似共用的返回鍵這種,放在基礎組件中;

    • 顏色值 color,不要共用,沒多少,寫在自己組件中;

    • 尺寸 dp,這個基本沒啥變化,可以放到基礎組件中;

    • 樣式 style,涉及到Activity主題的,這個可以在基礎組件中定義,組件中繼承,這樣既保證了整個app風格,也可以特殊化。

    • 為了保證 組件內資源 的 充分隔離,我們可以 規范命名,以模塊化命名,這樣的外部調用時,不容易出錯。

      例如 登錄模塊 ic_login_phone login_phone_hint_text ...

      嚴格一點,可以在 build.gradle 文件中配置 命名前綴,這樣編碼時 不按照這種格式,就會飄紅。只針對xml文件,圖片還需自己規范命名。

      android {resourcePrefix "login_"// 其他配置 ... } 復制代碼
  • 代碼

    • 共用的基類,工具類等放在基礎組件中
    • 為了防止外部直接引用 組件內的類,可以在集成到工程中時 采用runtimeOnly
    dependencies {...runtimeOnly project(':moudle_shop') } 復制代碼

第三步:調試配置

代碼寫好后,需要 單獨調試 或 集成到app中調試,那就需要配置兩種模式。

  • 創建 gradle.properties 文件,定義屬性用來區分兩種模式
//例如 false表示集成調試,true表示單獨調試 isSingleRun = false 復制代碼
  • 在 build.gradle 文件中配置

    • 配置工程類型
    if (isSingleRun.toBoolean()) {//單獨調試 應該是工程類型apply plugin: 'com.android.application' } else {//集成調試 則作為library集成到app中apply plugin: 'com.android.library' } android{... } ...復制代碼
    • 配置 applicationId
    android{defaultConfig {//單獨測試 需要配置applicationIdif (isSingleRun.toBoolean()) {applicationId "com.xx.moudle_xx"}} } 復制代碼
    • 配置 AndroidManifest.xml

    單獨測試是需要一個啟動頁入口的,所以清單文件也需要配置

    android{sourceSets {main {if (isSingleRun.toBoolean()) {//單獨測試 新建一個文件夾manifest,存放清單文件,設置啟動頁入口manifest.srcFile 'src/main/manifest/AndroidManifest.xml'} else {manifest.srcFile 'src/main/AndroidManifest.xml'}}} } 復制代碼
    • 配置 Applcation

    每個組件,都會有需要初始化的東西,共用的(比如:網絡框架,圖片框架)可以在基礎組件中初始化,那么一些自己模塊需要初始化的東西,該怎么做?因為集成測試不會初始化 組件的Application。

    這里我們可以在基礎組件中定義 BaseApp 4. 組件 Application 的動態配置

  • 至此,調試配置完成,配置的目的就是為了方便 組件 獨立開發時測試 以及 集成到app時測試。將 gradle.properties 文件中的 isSingleRun 屬性設置為true,測試一下配置是否成功。

第四步:調試測試

  • 將isSingleRun設置為true ,就可以 單獨調試 了,像 app 工程那樣。

  • 將isSingleRun設置為false ,然后集成到app中就可以 集成測試 了。

    集成測試這里有個問題,如何跳轉到組件中的 Activity呢?需要用到 Alibaba 開源的 ARouter

    推薦閱讀 Android 組件化最佳實踐 中的 四、組件間界面跳轉。

    ARouter配置步驟:

    base組件中配置build.gradle

    android {defaultConfig {...javaCompileOptions {annotationProcessorOptions {arguments = [ moduleName : project.getName() ]}}} }dependencies {api 'com.alibaba:arouter-api:1.3.1'// arouter-compiler 的注解依賴需要所有使用 ARouter 的 module 都添加依賴annotationProcessor 'com.alibaba:arouter-compiler:1.1.4' } 復制代碼

    組件中配置

    android {defaultConfig {...javaCompileOptions {annotationProcessorOptions {arguments = [ moduleName : project.getName() ]}}} }dependencies {...annotationProcessor 'com.alibaba:arouter-compiler:1.1.4' } 復制代碼

    在app主程序 Application中初始化

    //這斷必須寫,否則不生效,本以為我不需要打印日志,沒寫這段,結果花費好長時間找bugif (BuildConfig.DEBUG) { // 這兩行必須寫在init之前,否則這些配置在init過程中將無效ARouter.openLog(); // 打印日志ARouter.openDebug(); // 開啟調試模式(如果在InstantRun模式下運行,必須開啟調試模式!線上版本需要關閉,否則有安全風險) } ARouter.init(this); 復制代碼

    組件中被啟動Activity 配置 path,path 必須是 ”/“ 開頭,最少兩級

    @Route(path = "/test/test") public class TestActivity extends BaseActivity {} 復制代碼

    主程序啟動 組件中 Activity

    ARouter.getInstance().build("/test/test").navigation(); 復制代碼
  • 至此,單獨調試 和 簡單的集成調試 完結,接下來更多的就是 集成調試情況下,如何保證組件在高度聚合的情況下互通有無。

組件間數據傳遞

整體思路就是在基礎組件中定義接口,組件間通過接口傳遞數據,完全解耦。

感謝

Android 組件化最佳實踐

轉載于:https://juejin.im/post/5cdd15dc51882515cc7e4ca8

總結

以上是生活随笔為你收集整理的架构:Android 组件化开发的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。