android組件化學(xué)習(xí)記錄-1項(xiàng)目的組件化改造

實(shí)際意義:

將工程各個(gè)模塊分離,并且能夠獨(dú)立運(yùn)行,方便開(kāi)發(fā)和測(cè)試

項(xiàng)目改造步驟

1.項(xiàng)目目錄下創(chuàng)建config.gradle文件,記錄公用的gradle設(shè)置,對(duì)版本等進(jìn)行統(tǒng)一管理

//注意:自定義的變量請(qǐng)使用 ext_ 開(kāi)頭,方便全局搜索
//擴(kuò)展
ext {
    //false:組件模式
    //true:集成模式
    ext_isModule = true

    //android的版本相關(guān)設(shè)置
    ext_android = [
            compileSdkVersion: 26,
            minSdkVersion    : 14,
            targetSdkVersion : 26,
            versionCode      : 1,
            versionName      : "1.0"
    ]

    //各個(gè)組件的appId
    ext_appId = [
            "app"    : "com.tyh.wigdit.zujianhua",
            "module1": "com.tyh.wigdit.module1",
            "module2": "com.tyh.wigdit.module2"
    ]

    //support庫(kù)的版本  recyclerview等都用這個(gè)版本
    ext_supportLibrary = "27.0.1"

    ext_dependencies = [
            "appcompat-v7": "com.android.support:appcompat-v7:${ext_supportLibrary}",
    ]

}

2.在項(xiàng)目的gradle文件中,引用config.gradle

apply from: "config.gradle"

3.對(duì)library進(jìn)行修改,使其具備在library和application之間進(jìn)行切換的能力

3.1增加library轉(zhuǎn)換成Application后使用的AndroidManifest.xml文件及其他需要的文件夾,如java文件夾等

Library組件化后的文件目錄.png

3.2修改library的build.gradle文件

//通過(guò)ext_isModule控制是application 還是library
if (ext_isModule) {
    apply plugin: 'com.android.application'
} else{
    apply plugin:  'com.android.library'
}

def cfg = ext_android
def appId = ext_appId
def dependss = ext_dependencies

android {
    compileSdkVersion cfg.compileSdkVersion

    defaultConfig {
        minSdkVersion cfg.minSdkVersion
        targetSdkVersion cfg.targetSdkVersion
        versionCode cfg.versionCode
        versionName cfg.versionName

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        //全局變量-->是否是組件模式
        buildConfigField ("boolean","isModule",String.valueOf(ext_isModule))

        //增加application狀態(tài)下的其他配置
        if (ext_isModule) {
            //applicationId
            applicationId appId["module1"]
            //資源文件
            sourceSets {
                main{
                    //manifest文件
                    manifest.srcFile 'src/main/module/AndroidManifest.xml'
                    //java資源文件,
                    //需要給外部使用的,就放在默認(rèn)的文件夾中src/main/java
                    //不需要給外部使用的,就放在內(nèi)部文件中
                    java.srcDirs 'src/main/java','src/main/module/java'
                }
            }
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation dependss["appcompat-v7"]
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

4 對(duì)app的build.gradle進(jìn)行改造

apply plugin: 'com.android.application'

//引入頂層的build.gradle文件的設(shè)置
def cfg = ext_android
def appId = ext_appId
def dependss = ext_dependencies

android {
    compileSdkVersion cfg.compileSdkVersion
    defaultConfig {
        applicationId appId["app"]
        minSdkVersion cfg.minSdkVersion
        targetSdkVersion cfg.targetSdkVersion
        versionCode cfg.versionCode
        versionName cfg.versionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation dependss["appcompat-v7"]
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    //組件狀態(tài)下,才去引用各個(gè)組件
    if (!ext_isModule) {
        implementation project(':module1')
    }
}

通過(guò)以上的設(shè)置,項(xiàng)目完成了組件化開(kāi)發(fā)的改造,我們可以通過(guò)config.gradle文件中的ext_isModule變量來(lái)控制組件的狀態(tài)切換,

最后編輯于
?著作權(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)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,168評(píng)論 25 708
  • Android組件化項(xiàng)目地址:Android組件化項(xiàng)目AndroidModulePattern Android組件...
    半灬邊灬天閱讀 3,003評(píng)論 4 37
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,635評(píng)論 19 139
  • 8.9日上午,看書(shū)一小時(shí),接到同事電話,他父親需要手術(shù),急忙趕過(guò)去幫忙。病因是腿上血管堵塞,影響走路。做了微創(chuàng)手術(shù)...
    zcj好好學(xué)習(xí)閱讀 197評(píng)論 0 2
  • 【日精進(jìn):小煜媽打卡第214天】-20180105 1、經(jīng)典學(xué)習(xí):《易經(jīng)》序卦傳前部分,《詩(shī)經(jīng)》大雅235-236...
    b79ddab78458閱讀 159評(píng)論 0 0

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