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

歡迎訪問 生活随笔!

生活随笔

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

Android

【Android 组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 )

發(fā)布時間:2025/6/17 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android 组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 ) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 一、頂層 Gradle 定義擴展變量
  • 二、獲取頂層的 Gradle 對象
  • 三、Module 中使用 Gradle 變量
  • 四、Gradle 中打印變量值
  • 五、涉及到的 Gradle 構(gòu)建腳本
  • 六、博客資源





一、頂層 Gradle 定義擴展變量



在 Project 層級的 build.gradle 中 , 使用 apply from: “component.gradle , 引入 component.gradle 配置 ;

// 將 component.gradle 配置文件中的內(nèi)容導入到該位置 // 相當于引入頭文件 apply from: "component.gradle"

apply from 相當于引入頭文件 , 將 component.gradle 配置文件中的所有內(nèi)容 , 原封不動的拷貝到該語句所在位置 ;


component.gradle 是開發(fā)者自定義的一個配置文件 , 是使用 Groovy 語言編寫的 ;

ext 是 extension 擴展 , 通過 ext 可以定義擴展的變量 ;

component.gradle 文件內(nèi)容如下 : 全局使用的變量定義在這里 ;

// ext 是 extension 擴展的含義 // ext 后的 {} 花括號 , 是閉包 , ext{// 定義 android 變量 , 類型是字典 Map 集合// 其中定義了若干鍵值對集合androidConfig = [compileSdkVersion : 30,minSdkVersion : 18,targetSdkVersion : 30,versionCode : 1,versionName : "1.0"]applicationId = ["app" : "kim.hsl.component","mylibrary" : "","mylibrary2" : "",] }

在 Project 層級的 build.gradle 中定義的變量 , 可以在 Module 級的 build.gradle 中使用 ;

如 : 在上述 Project 層級的 build.gradle 中引入了 component.gradle 配置 , 那么在 Module 級別的 build.gradle 中可以通過 rootProject.ext.android 的方式調(diào)用在 component.gradle 定義的 android 變量 ;


在頂層構(gòu)建腳本中定義的變量 , 在任何 Module 中的構(gòu)建腳本都都可以獲取該變量 ;





二、獲取頂層的 Gradle 對象



在 build.gradle 中調(diào)用 rootProject , 相當于調(diào)用 Project 對象的 getRootProject() 方法 , 這是 Groovy 提供的語法糖 , 類似于 Kotlin 用法 ; 該方法返回一個 Project 對象 , 該對象代表根目錄下的 Project 層級的 build.gradle 構(gòu)建腳本對應的 Project 對象 ;

rootProject 相當于頂層的 Project 級別的 build.gradle ;


Project 對應 getRootProject 方法源碼 :

public interface Project extends Comparable<Project>, ExtensionAware, PluginAware {String DEFAULT_BUILD_FILE = "build.gradle";String PATH_SEPARATOR = ":";String DEFAULT_BUILD_DIR_NAME = "build";String GRADLE_PROPERTIES = "gradle.properties";Project getRootProject(); }



三、Module 中使用 Gradle 變量



上面在頂層的 build.gradle 中定義了擴展變量 , 可以在 Module 下的 build.gradle 中獲取 ;

使用 rootProject.ext.androidConfig 代碼 , 可以獲取在頂層 component.gradle 中定義的 androidConfig 變量 ;

// 定義 android 變量 , 類型是字典 Map 集合// 其中定義了若干鍵值對集合androidConfig = [compileSdkVersion : 30,minSdkVersion : 18,targetSdkVersion : 30,versionCode : 1,versionName : "1.0"]

將 rootProject.ext.androidConfig 變量賦值給本地的 def androidConfig 變量 , def 相當于 Java 中的 Object , def androidConfig 是聲明了一個新變量 , 名稱是 androidConfig ;

// def 相當于 Java 中的 Object // 聲明 config 和 appId 變量 , 并為其賦值 def androidConfig = rootProject.ext.androidConfig def appId = rootProject.ext.applicationId

通過調(diào)用 androidConfig.compileSdkVersion , 可以獲取 component.gradle 中定義的 androidConfig 變量中對應的 compileSdkVersion 鍵對應的值 30 ;

通過調(diào)用 androidConfig.minSdkVersion , 可以獲取 component.gradle 中定義的 androidConfig 變量對應的 minSdkVersion 鍵對應的值 18 ;


部分代碼示例 :

// 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"} }

這樣做的好處是 , 可以統(tǒng)一管理 Android 應用的配置版本 , 不用每個 Module 都進行獨立修改 ;





四、Gradle 中打印變量值



在 build.gradle 中打印輸出變量值 , 在 Module 下的 build.gradle 中使用 println 函數(shù) 打印變量 , 變量放在 “${}” 中 , 打印結(jié)果在 編譯時輸出到 Build 面板中 ;

println("Print Variable : rootProject.ext.android : ${rootProject.ext.android}")

注意 : 不要打印中文 , 會出現(xiàn)亂碼 ;





五、涉及到的 Gradle 構(gòu)建腳本



頂層 Gradle 代碼示例 :

// Top-level build file where you can add configuration options common to all sub-projects/modules.// 將 component.gradle 配置文件中的內(nèi)容導入到該位置 // 相當于引入頭文件 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 }

引入的 Gradle 代碼 :

// ext 是 extension 擴展的含義 // ext 后的 {} 花括號 , 是閉包 , ext{// 定義 android 變量 , 類型是字典 Map 集合// 其中定義了若干鍵值對集合androidConfig = [compileSdkVersion : 30,minSdkVersion : 18,targetSdkVersion : 30,versionCode : 1,versionName : "1.0"]applicationId = ["app" : "kim.hsl.component","mylibrary" : "","mylibrary2" : "",] }

Module 層級的 Gradle 代碼示例 : Component\app\build.gradle 構(gòu)建腳本 ;

plugins {id 'com.android.application'id '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' }



六、博客資源



博客源碼 :

  • GitHub : https://github.com/han1202012/Component
  • CSDN 下載 :

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。