如何获取Android project下 build.gradle、gradle.properties、local.properties文件中定义的属性或变量

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

    }
}

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值