1、在gradle文件中读取project下 build.gradle
属性:
ext {
compileSdk = 28
minSdk = 17
targetSdk = 28
support = "28.0.0"
buildTools = "28.0.0"
supportLibraryVersion = "28.0.0"
versionCode = 4
versionName = "1.0.4"
cfgs = [
utilcodeVersion: "1.23.0",
eventbusVersion: "3.0.0",
glideVersion: "3.7.0",
retrofitVersion: "2.4.0",
rxandroidVersion: "1.1.0",
rxjavaVersion: "1.1.0",
okhttpVersion: "3.5.0",
loggingInterceptorVersion: "3.0.0",
autosizeVersion: "1.1.2",
baseRecyclerViewAdapterHelperVersion: "2.9.30",
lottieVersion: "2.1.0",
fastjsonVersion: "1.2.47",
qmuiVersion: "1.1.3",
bottomNavigationBarVersion: "2.1.0",
recyclerViewVersion: "28.0.0",
zhihuMatisse:"0.5.2-beta2"
]
}
读取:
defaultConfig {
applicationId "com.star.commodity.release"
minSdkVersion rootProject.ext.minSdk
targetSdkVersion rootProject.ext.targetSdk
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
multiDexEnabled true
}
implementation "com.android.support:appcompat-v7:${supportLibraryVersion}"
implementation "com.blankj:utilcode:${cfgs.utilcodeVersion}"
2、在gradle文件中读取gradle.properties
属性:
isModule=false
读取:
在Module 的build.gradle 中
isModule.toBoolean() 或者 直接取isModule就可以了
3、在gradle文件中读取local.properties
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def sdkDir = properties.getProperty('sdk.dir')
def ndkDir = properties.getProperty('ndk.dir')
4、在代码中读取gradle.propeties
第一步:在gradle.properties中添加属性
IS_USE_IJKPLAYER_FOR_VOD=false
第二步: 在build.gradle文件中的android 下的 defaultConfig中定义如下:String要加转移符 Boolean不需要,注意此方式也可以读取build.gradle中的定义的变量
defaultConfig {
//java代码中引用的定义形式
buildConfigField "String", "CUR_PROJECT", "\"${CUR_PROJECT}\""
buildConfigField "Boolean", "DEBUG_TAG", "${DEBUG_TAG}"
buildConfigField "String", "DEBUG_LOGIN_SN", "\"${DEBUG_LOGIN_SN}\""
buildConfigField "String", "DEBUG_LOGIN_MODEL", "\"${DEBUG_LOGIN_MODEL}\""
buildConfigField "String", "DEBUG_LOGIN_VENDOR", "\"${DEBUG_LOGIN_VENDOR}\""
buildConfigField "String", "DEBUG_LOGIN_TYPE", "\"${DEBUG_LOGIN_TYPE}\""
buildConfigField "String", "SERVER_UP_URL", "\"${SERVER_UP_URL}\""
buildConfigField "String", "VIDEO_EXTRANET_IP", "\"${VIDEO_EXTRANET_IP}\""
buildConfigField "String", "LOAD_H5_UP", "\"${LOAD_H5_UP}\""
buildConfigField "String", "TIME_SERVER_IP", "\"${TIME_SERVER_IP}\""
buildConfigField "Boolean", "SUPPORT_TIMESHIFT", "${SUPPORT_TIMESHIFT}"
buildConfigField "Boolean", "IS_USE_IJKPLAYER_FOR_VOD", "${IS_USE_IJKPLAYER_FOR_VOD}"
}
第三步:代码中读取
private boolean isUseIjkPlayer = BuildConfig.IS_USE_IJKPLAYER_FOR_VOD;
附实战示例:
示例一,利用gradle.properties适配多个项目
第一步:在gradle.properties中添加属性
CUR_PROJECT=UGA
第二步:在App下的build.gradle中写一个动态获取的方法
def getCurProjectVersionName(){
if (CUR_PROJECT.equals("UGA")) {
return "2.0.5"
} else {
return "2.3.1"
}
}
def getCurProjectVersionCode() {
if (CUR_PROJECT.equals("UGA")) {
return 2000005
} else {
return 2003001
}
}
第三步:调用方法获取版本信息
defaultConfig {
versionCode getCurProjectVersionCode()
versionName getCurProjectVersionName()
signingConfig signingConfigs.config
multiDexEnabled true
}
示例二、利用项目的build.gradle文件管理多个项目:
第一步: 为每一个项目创建一个config_xxx.gradle文件
第二步:在project的build.gradle文件中引用对应的 配置文件
需要编译哪个项目就打开对应的配置就可以了。
第三步:在每一个项目的对应的gradle文件中加入APP包名、名称、图标、版本号等各项配置
第四步:在AndroidManifest.xml文件中使用这些属性
(1)使用之前先在对应的module的build.gradle文件中添加对应的引用定义
android{
defaultConfig{
...
manifestPlaceholders = [
CUR_PROJECT : CUR_PROJECT,
APP_NAME : APP_NAME,
VERSION_CODE : VERSION_CODE,
SHARED_USER_ID: SHARED_USER_ID,
VERSION_NAME : VERSION_NAME,
APP_ICON : APP_ICON,
APPLICATION_ID: APPLICATION_ID
]
}
}
(2)正式引用
第五步:在代码中也要读取相关变量
(1)在对应的module的build.gradle文件中先定义引用
android{
defaultConfig{
...
//java代码中引用的定义形式
buildConfigField "String", "CUR_PROJECT", "\"${CUR_PROJECT}\""
buildConfigField "Boolean", "DEBUG_TAG", "${DEBUG_TAG}"
buildConfigField "String", "SERVER_UP_BRAIN_URL", "\"${getServerUpBrainUrl()}\""
}
}
//有些变量并不是所有项目都有的,就写一个读取方法,没有就返回默认值
def getServerUpBrainUrl(){
return hasProperty("SERVER_UP_BRAIN_URL") ? SERVER_UP_BRAIN_URL : "null"
}
注意:有些变量并不是所有项目都有的,就写一个读取方法,没有就返回默认值,例如:
def getServerUpBrainUrl(){
return hasProperty("SERVER_UP_BRAIN_URL") ? SERVER_UP_BRAIN_URL : "null"
}
(2)代码中直接通过BuildConfig.CUR_PROJECT 这种形式读取就可以了,先编译,否则会找不到
第六步:在对应module的build.gradle文件中引用包名等变量
android{
compileSdkVersion rootProject.ext.compileSdk
defaultConfig{
applicationId APPLICATION_ID
minSdkVersion rootProject.ext.minSdk
targetSdkVersion rootProject.ext.targetSdk
}
}