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

文章目录

一、顶层 Gradle 定义扩展变量

二、获取顶层的 Gradle 对象

三、Module 中使用 Gradle 变量

四、Gradle 中打印变量值

五、涉及到的 Gradle 构建脚本

六、博客资源

一、顶层 Gradle 定义扩展变量

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

// 将 component.gradle 配置文件中的内容导入到该位置

// 相当于引入头文件

apply from: "component.gradle"

apply from 相当于引入头文件 , 将 component.gradle 配置文件中的所有内容 , 原封不动的拷贝到该语句所在位置 ;

component.gradle 是开发者自定义的一个配置文件 , 是使用 Groovy 语言编写的 ;

ext是 extension 扩展 , 通过 ext 可以定义扩展的变量 ;

component.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" : "",

]

}

在 Project 层级的 build.gradle 中定义的变量 , 可以在 Module 级的 build.gradle 中使用 ;

如 : 在上述 Project 层级的 build.gradle 中引入了 component.gradle 配置 , 那么在 Module 级别的 build.gradle 中可以通过 rootProject.ext.android 的方式调用在 component.gradle 定义的 android 变量 ;

在顶层构建脚本中定义的变量 , 在任何 Module 中的构建脚本都都可以获取该变量 ;

二、获取顶层的 Gradle 对象

在 build.gradle 中调用 rootProject , 相当于调用 Project 对象的 getRootProject() 方法 , 这是 Groovy 提供的语法糖 , 类似于 Kotlin 用法 ; 该方法返回一个 Project 对象 , 该对象代表根目录下的 Project 层级的 build.gradle 构建脚本对应的 Project 对象 ;

rootProject 相当于顶层的 Project 级别的 build.gradle ;

Project 对应 getRootProject 方法源码 :

public interface Project extends Comparable, 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

通过调用androidConfig.compileSdkVersion , 可以获取 component.gradle 中定义的 androidConfig 变量中对应的 compileSdkVersion 键对应的值 30 ;

通过调用 androidConfig.minSdkVersion , 可以获取 component.gradle 中定义的 androidConfig 变量对应的 minSdkVersion 键对应的值 18 ;

部分代码示例 :

// def 相当于 Java 中的 Object

// 声明 config 和 appId 变量 , 并为其赋值

def androidConfig = rootProject.ext.androidConfig

def appId = rootProject.ext.applicationId

android {

compileSdkVersion androidConfig.compileSdkVersion

buildToolsVersion "30.0.3"

defaultConfig {

applicationId appId["app"]

minSdkVersion androidConfig.minSdkVersion

targetSdkVersion androidConfig.targetSdkVersion

versionCode androidConfig.versionCode

versionName androidConfig.versionName

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

}

}

这样做的好处是 , 可以统一管理 Android 应用的配置版本 , 不用每个 Module 都进行独立修改 ;

四、Gradle 中打印变量值

在 build.gradle 中打印输出变量值 , 在 Module 下的 build.gradle 中使用 println 函数打印变量 , 变量放在 “${}” 中 , 打印结果在 编译时输出到 Build 面板中 ;

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

5bc2e51e189d5cfedc41a853931bcdb1.png

注意 : 不要打印中文 , 会出现乱码 ;

五、涉及到的 Gradle 构建脚本

顶层 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

}

引入的 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 构建脚本 ;

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.applicationId

android {

compileSdkVersion androidConfig.compileSdkVersion

buildToolsVersion "30.0.3"

defaultConfig {

applicationId appId["app"]

minSdkVersion androidConfig.minSdkVersion

targetSdkVersion androidConfig.targetSdkVersion

versionCode androidConfig.versionCode

versionName androidConfig.versionName

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

}

}

compileOptions {

sourceCompatibility JavaVersion.VERSION_1_8

targetCompatibility 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 下载 :

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值