Android組件化開發初探

組件化

項目需求的不斷變更,項目越來越大,代碼越來越臃腫,耦合度越來越高,導致開發效率下降。爲了解決這一問題,最開始模塊化,劃分爲多個模塊進行開發,由於項目過大,每次打包編譯特別慢,測試不方便,然後對每個模塊進行拆分,實現組件化。
在這裏插入圖片描述
這樣做的一個好處,各個業務組件可以單獨拿出來測試,減少了每次打包時的編譯耗費時間,開發人員可以單獨負責自己的業務組件。

組件各個模塊配置

android studio 提供了一個工程下創建多個module,我們怎麼樣使這些module在app module下進行插拔式。
在這裏插入圖片描述
保證在每個module的build.gradle中可以調用一個變量,可以在項目工程的gradle.properties文件中頂一個變量如:

isModule=false

在業務模塊的build.gradle中的配置如下:

if (isModule.toBoolean()) {
    apply plugin: 'com.android.application'//可以單獨打包成apk
} else {
    apply plugin: 'com.android.library'
}
android {
    compileSdkVersion 28
    defaultConfig {
        if (isModule.toBoolean()) {
            applicationId "com.example.infoapplication"
        }
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
    }
    sourceSets {
        main {
            if (isModule.toBoolean()) {
                manifest.srcFile 'src/main/release/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/debug/AndroidManifest.xml'
            }
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
dependencies {
    implementation 'com.android.support:appcompat-v7:28.0.0'
    //Arouter
    annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
    implementation project(':mylibrary')
}

同時業務模塊的項目結構如下:AndroidManifest.xml加載方式見sourceSets 。
在這裏插入圖片描述
而app殼下的文件配置如下:

dependencies {
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    if (!isModule.toBoolean()) {
        implementation project(':shopcomponent')
        implementation project(':infoapplication')
    } 
    implementation project(':mylibrary')
}

跨模塊跳轉(路由)

由於各個功能在各組件模塊中,這就導致Activity之間跨模塊跳轉,這樣有兩種方式,1.通過包名,可以跳轉到另一個模塊的activity,2.通過路由,使用阿里巴巴的ARouter。
ARouter的功能:
支持直接解析標準URL進行跳轉,並自動注入參數到目標頁面中
支持多模塊工程使用
支持添加多個攔截器,自定義攔截順序
支持依賴注入,可單獨作爲依賴注入框架使用
支持InstantRun
支持MultiDex(Google方案)
映射關係按組分類、多級管理,按需初始化
支持用戶指定全局降級與局部降級策略
頁面、攔截器、服務等組件均自動註冊到框架
支持多種方式配置轉場動畫
支持獲取Fragment
完全支持Kotlin以及混編(配置見文末 其他#5)
支持第三方 App 加固(使用 arouter-register 實現自動註冊)
支持生成路由文檔
提供 IDE 插件便捷的關聯路徑和目標類
對於Arouter的配置:
在基模塊中進行配置:

    //arouter  https://github.com/alibaba/ARouter
    api 'com.alibaba:arouter-api:1.4.1'
    annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }

同時在各個子組件模塊中添加:(由於Arouter以註解的形式)

annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'

javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }

示例代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章