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

歡迎訪問 生活随笔!

生活随笔

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

Android

【Android 组件化】使用 Gradle 实现组件化 ( 组件模式与集成模式切换 )

發布時間:2025/6/17 Android 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 组件化】使用 Gradle 实现组件化 ( 组件模式与集成模式切换 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、模塊化 與 組件化 模式控制
  • 二、applicationId 設置
  • 三、使用 sourceSets 配置組件模式下使用的清單文件
  • 四、組件模式 與 集成模式 切換示例
  • 五、完整的 Gradle 配置
    • 1、Project 層級的 build.gradle
    • 2、Project 層級的擴展變量定義
    • 3、主應用的 build.gradle
    • 4、Library 模塊的 build.gradle
  • 六、博客資源


上一篇博客 【Android 組件化】使用 Gradle 實現組件化 ( Gradle 變量定義與使用 ) 中 , 在頂層的 build.gradle 中定義了相關參數變量 ;

在頂層的 build.gradle 中定義全局的變量 , 用于統一管理各個 Module 的編譯相關版本號 ;

全局變量可以定義在 ext 擴展 中 , 也可以定義在 gradle.properties 屬性 中 ;


組件化的本質就是可以實時切換依賴庫 Module 的屬性 , 該 Module 是 Application 可執行模塊 , 還是 Library 依賴庫模塊 ;





一、模塊化 與 組件化 模式控制



在頂層 build.gradle 定義擴展變量 , 用于標識當前是 模塊化模式 還是 組件化模式 , 模塊化模式 就是默認的模式 ;

// ext 是 extension 擴展的含義 // ext 后的 {} 花括號 , 是閉包 , ext{// 是否是模塊化模式// 集成模式 true ( 默認模式 , 模塊化 )// 組件模式 false ( 組件化 )isModuleMode = false }

如果將變量定義在 build.gradle 構建腳本中 , 需要使用 ext 擴展變量 , 在 gradle.properties 可以直接定義 ;


在 Application Module 下的 build.gradle 保持不變 :

apply plugin: 'com.android.application' apply plugin: 'kotlin-android'

在 Library Module 下的 build.gradle 中控制當前 Module 是 Application 模塊還是 Library 模塊 ;

// 根據 isModuleMode 動態切換 集成模式 / 組件模式 if (isModuleMode){// 集成模式apply plugin: 'com.android.library' }else{// 組件模式apply plugin: 'com.android.application' } apply plugin: 'kotlin-android'



二、applicationId 設置



Application 模塊在 " android/defaultConfig " 層級下 , 必須有 applicationId ;

Library 模塊不需要配置 applicationId ;


這里需要進行分別處理 , 如果是 Library 模塊 , 在 組件模式 下 , 必須配置 " android / defaultConfig / applicationId " 選項 ; 但是在 集成模式 下 , 必須不能配置 " android / defaultConfig / applicationId " 選項 ;


主要配置如下 : 在 集成模式 下 , 不配置 applicationId ; 在 組件模式 下 , 才配置 applicationId 選項 ;

android {defaultConfig {if (!isModuleMode){// 組件模式 : 必須配置 applicationIdapplicationId appId["library1"]}} }

注意 : 在 Application Module 下不進行上述配置 , 只有在 Library Module 下才進行上述配置 ;





三、使用 sourceSets 配置組件模式下使用的清單文件



使用 sourceSets 資源配置選項 , 可以配置 java , manifest , res , assets , 等目錄 ;


Android Studio 中

  • 默認的 Java 代碼的路徑是 Component\app\src\main\java ,
  • 默認的清單文件路徑是 Component\app\src\main\AndroidManifest.xml ,
  • 默認的資源路徑是 Component\app\src\main\res ,
  • 默認的 Assets 資源路徑是 Component\app\src\main\assets

在 Library Module 中 , 一般不會配置 Launcher Activity , 因此在 組件模式 下 , 需要指定一個新的 AndroidManifest.xml 清單文件 ;

這里在 main 目錄下創建 component 目錄 , 組件化 相關文件 , 都放在該目錄中 ;


下圖中 , 藍色矩形框中是默認的清單文件 , 在 集成模式 下的 Library Module 中使用 ; 紅色矩形框中是 組件模式 下使用的清單文件 , 在 Application Module 中使用 ;


配置 清單文件 示例 :

android {compileSdkVersion androidConfig.compileSdkVersionbuildToolsVersion "30.0.3"defaultConfig {if (!isModuleMode){// 組件模式 : 必須配置 applicationIdapplicationId appId["library2"]}// 資源配置sourceSets{main{if (!isModuleMode){// 組件化模式下使用 ComponentAndroidManifest.xml 作為清單文件manifest.srcFile 'src/main/component/AndroidManifest.xml'}}}} }



四、組件模式 與 集成模式 切換示例



將 component.gradle 中的 isModuleMode 變量設置為 true , 當前的模式就是默認的模塊化模式 ;

編譯后效果如下 : 111 個 Application 應用 , 222 個 Library 應用 ;


將 component.gradle 中的 isModuleMode 變量設置為 false , 當前的模式就是 組件模式 ;

編譯后效果如下 : 333 個 Application 應用 ;





五、完整的 Gradle 配置





1、Project 層級的 build.gradle


// Top-level build file where you can add configuration options common to all sub-projects/modules.// 將 component.gradle 配置文件中的內容導入到該位置 // 相當于引入頭文件 apply from: "component.gradle"buildscript {ext.kotlin_version = "1.4.10"repositories {google()jcenter()}dependencies {classpath "com.android.tools.build:gradle:4.1.0"classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"// NOTE: Do not place your application dependencies here; they belong// in the individual module build.gradle files} }allprojects {repositories {google()jcenter()} }task clean(type: Delete) {delete rootProject.buildDir }

2、Project 層級的擴展變量定義


// ext 是 extension 擴展的含義 // ext 后的 {} 花括號 , 是閉包 , ext{// 是否是模塊化模式// 集成模式 true ( 默認模式 , 模塊化 )// 組件模式 false ( 組件化 )isModuleMode = false// 定義 android 變量 , 類型是字典 Map 集合// 其中定義了若干鍵值對集合androidConfig = [compileSdkVersion : 30,minSdkVersion : 18,targetSdkVersion : 30,versionCode : 1,versionName : "1.0"]applicationId = ["app" : "kim.hsl.component","library1" : "kim.hsl.library1","mylibrary2" : "kim.hsl.library2",]// androidx 版本號androidxVersion = "1.2.0"// 統一管理依賴庫dependencies = [// ${} 表示引用之前定義的變量"appcompat" : "androidx.appcompat:appcompat:${androidxVersion}"] }

3、主應用的 build.gradle


apply plugin: 'com.android.application' apply plugin: 'kotlin-android'println("Print Variable : rootProject.ext.androidConfig : ${rootProject.ext.androidConfig}")// def 相當于 Java 中的 Object // 聲明 config 和 appId 變量 , 并為其賦值 def androidConfig = rootProject.ext.androidConfig def appId = rootProject.ext.applicationIdandroid {compileSdkVersion androidConfig.compileSdkVersionbuildToolsVersion "30.0.3"defaultConfig {applicationId appId["app"]minSdkVersion androidConfig.minSdkVersiontargetSdkVersion androidConfig.targetSdkVersionversionCode androidConfig.versionCodeversionName androidConfig.versionNametestInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = '1.8'} }dependencies {implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"implementation 'androidx.core:core-ktx:1.3.2'implementation 'androidx.appcompat:appcompat:1.2.0'implementation 'com.google.android.material:material:1.3.0'implementation 'androidx.constraintlayout:constraintlayout:2.0.4'testImplementation 'junit:junit:4.+'androidTestImplementation 'androidx.test.ext:junit:1.1.2'androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'if (isModuleMode){// 集成模式下才能引用這兩個 Library Moduleimplementation project(':library1')implementation project(':library2')} }

4、Library 模塊的 build.gradle


// 根據 isModuleMode 動態切換 集成模式 / 組件模式 if (isModuleMode){// 集成模式apply plugin: 'com.android.library' }else{// 組件模式apply plugin: 'com.android.application' } apply plugin: 'kotlin-android'println("Print Variable : rootProject.ext.androidConfig : ${rootProject.ext.androidConfig}")// def 相當于 Java 中的 Object // 聲明 config 和 appId 變量 , 并為其賦值 def androidConfig = rootProject.ext.androidConfig def appId = rootProject.ext.applicationIdandroid {compileSdkVersion androidConfig.compileSdkVersionbuildToolsVersion "30.0.3"defaultConfig {if (!isModuleMode){// 組件模式 : 必須配置 applicationIdapplicationId appId["library1"]}minSdkVersion androidConfig.minSdkVersiontargetSdkVersion androidConfig.targetSdkVersionversionCode androidConfig.versionCodeversionName androidConfig.versionNametestInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"// 資源配置sourceSets{main{if (!isModuleMode){// 組件化模式下使用 ComponentAndroidManifest.xml 作為清單文件manifest.srcFile 'src/main/component/AndroidManifest.xml'}}}}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = '1.8'} }dependencies {implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"implementation 'androidx.core:core-ktx:1.3.2'implementation 'androidx.appcompat:appcompat:1.2.0'implementation 'com.google.android.material:material:1.3.0'implementation 'androidx.constraintlayout:constraintlayout:2.0.4'testImplementation 'junit:junit:4.+'androidTestImplementation 'androidx.test.ext:junit:1.1.2'androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' }



六、博客資源



博客源碼 :

  • GitHub : https://github.com/han1202012/Component
  • CSDN 下載 : https://download.csdn.net/download/han1202012/18742538

總結

以上是生活随笔為你收集整理的【Android 组件化】使用 Gradle 实现组件化 ( 组件模式与集成模式切换 )的全部內容,希望文章能夠幫你解決所遇到的問題。

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