方法一:
buildConfigField "int", "CHANNELID", "100"
方法二:
manifestPlaceholders = [CHANNELID : "100"]
通过这种方式(方法二)命名常量之后就可以在AndroidManifest.xml中使用${CHANNELID}的方式了。
方法二常常被用来设置的常量包括图标,还有一些集成sdk的key之类。
manifestPlaceholders = [app_icon : "@mipmap/ic_launcher_beta",
app_icon_round: "@mipmap/ic_launcher_beta_round",
]
其他方法都可以通过BuildConfig.xxx 的方式在代码中获取并使用,看情况使用吧。另外方法一和二在当前模块build.gradle中定义的话,就只能在再当前module中使用。如果要整个项目都使用的话,还是使用方法四。(方法三的优雅版)
方法一和方法二:可以看另一篇文章:build_gradle常量的使用
方法三和四可以多module共用,在项目或者依赖库版本升级的时候,可以避免修改起来工作量太大,而且可能出现漏改的情况,导致依赖冲突、打包失败等的问题。
方法三:
gradle可以通过ext来自定义常量,要做到常量共用的话,就要在根节点下的build.gradle文件中进行常量定义。
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
ext {
android = [
compileSdkVersion: 29,
buildToolsVersion: "29.0.2",
applicationId : "com.geeboo.jetpackproject",
minSdkVersion : 16,
targetSdkVersion : 29,
versionCode : 1,
versionName : "1.0"
]
libs = [
libAndroidAppcompat: 'androidx.appcompat:appcompat:1.1.0',
libAndroidConstraintlayout: 'androidx.constraintlayout:constraintlayout:1.1.3',
libJunit: 'junit:junit:4.12',
libTestJunit: 'androidx.test.ext:junit:1.1.1',
libTestEspresso: 'androidx.test.espresso:espresso-core:3.2.0'
]
}
写法四
在根目录下创建一个common.gradle文件(文件名称随意)专门用来定义常量
ext {
android = [
compileSdkVersion: 29,
buildToolsVersion: "29.0.2",
applicationId : "com.xxx.xxx",
minSdkVersion : 16,
targetSdkVersion : 29,
versionCode : 1,
versionName : "1.0"
]
libs = [
libAndroidAppcompat: 'androidx.appcompat:appcompat:1.1.0',
libAndroidConstraintlayout: 'androidx.constraintlayout:constraintlayout:1.1.3',
libJunit: 'junit:junit:4.12',
libTestJunit: 'androidx.test.ext:junit:1.1.1',
libTestEspresso: 'androidx.test.espresso:espresso-core:3.2.0'
]
}
然后在根节点下的build.gradle中添加 apply from: file(‘common.gradle’)
apply from: file('common.gradle')
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.6.1'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
使用:
apply plugin: 'com.android.application'
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
defaultConfig {
applicationId rootProject.ext.android.applicationId
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation libs.libAndroidAppcompat
implementation libs.libAndroidConstraintlayout
testImplementation libs.libJunit
androidTestImplementation libs.libTestJunit
androidTestImplementation libs.libTestEspresso
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:${versions.coroutinesVersion}"
}
写法五
直接在gradle.properties中定义:
BUILD_TOOLS_VERSION=28.0.3
SUPPORT_VERSION=27.1.1
MIN_SDK_VERSION=21
TARGET_SDK_VERSION=26
COMPILE_SDK_VERSION=29
使用:
android {
compileSdkVersion COMPILE_SDK_VERSION as int
defaultConfig {
minSdkVersion MIN_SDK_VERSION as int
targetSdkVersion TARGET_SDK_VERSION as int