gradle.properties使用过程中的注意事项

假如我们的gradle.properties文件内容如下:

	# Project-wide Gradle settings.
	# IDE (e.g. Android Studio) users:
	# Project-wide Gradle settings.
	# IDE (e.g. Android Studio) users:
	# Gradle settings configured through the IDE *will override*
	# any settings specified in this file.
	# For more details on how to configure your build environment visit
	# http://www.gradle.org/docs/current/userguide/build_environment.html
	# Specifies the JVM arguments used for the daemon process.
	# The setting is particularly useful for tweaking memory settings.
	org.gradle.jvmargs=-Xmx1536m
	# When configured, Gradle will run in incubating parallel mode.
	# This option should only be used with decoupled projects. More details, visit
	# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
	# org.gradle.parallel=true
	
	SDK_RELEASE=true
	SDK_VERSION=2.0.15
	appVersionCode=100
	appVersionName=1.0.0
	RELEASE_STORE_PASSWORD=111111
	RELEASE_KEY_ALIAS=key0
	RELEASE_KEY_PASSWORD=111111
	android.useAndroidX=true
	android.enableJetifier=true
	appKey="oosjv"
	appType="1"
	#不能使用中文做变量内容,乱码
	alihotfixFlag=""

现在我们要获取useAndroidX、appKey、appType、hotfixTag这几个参数,则流程如下:

首先

在app下的build.gradle里面配置参数:

	buildTypes {
        release {
            ......
            buildConfigField("String", "appKey", project.properties.get("appKey"))
            buildConfigField("String", "appType", project.properties.get("appType"))
            buildConfigField "String", "hotfixTag", hotfixTag
            buildConfigField("boolean", "useAndroidX",  project.properties.get("android.useAndroidX"))
        }
        debug {
            ......
            buildConfigField("String", "appKey", project.properties.get("appKey"))
            buildConfigField("String", "appType", project.properties.get("appType"))
            buildConfigField "String", "alihotfixFlag", alihotfixFlag
            buildConfigField("boolean", "useAndroidX",  project.properties.get("android.useAndroidX"))
        }
    }
然后

在BuildConfig里面配置对应的属性:

	public final class BuildConfig {
		public static final boolean DEBUG = Boolean.parseBoolean("true");
		public static final String APPLICATION_ID = "com.bjh.iauhgdf";
		public static final String BUILD_TYPE = "debug";
		public static final String FLAVOR = "developDebug";
		public static final int VERSION_CODE = 100;
		public static final String VERSION_NAME = "1.0.0";
		public static final String appKey = "oosjv";
		public static final String appType = "1";
		public static final String alihotfixFlag= "";
		public static final boolean useAndroidX = true;
	}

最后

最后在要用到的地方获取:

	String alihotfixFlag= BuildConfig.alihotfixFlag;
	boolean isuseAndroidX = BuildConfig.useAndroidX;
	String appTyp = BuildConfig.appTyp
	String appKey = BuildConfig.appKey

这里在获取gradle.properties里面的值的时候有几个地方要注意:

在app下的build.gradle里面配置参数的时候要注意参数类型要与gradle.properties对应,否则报错。

比如这里的appKey、appType、alihotfixFlag、isuseAndroidX这四个都是字符串String型,但是alihotfixFlag在app的build.gradle文件里面的处理方式完全不一样。这里要注意

在python的打包构建中,对于替换gradle.properties文件里面的内容有以下几点要注意:

1、gradle.properties文件里面的变量的值不能设置为中文。gradle.properties在中文编码会出现乱码而且很难解决。
2、在构建脚本里面,针对key=“value"的键值对,我们要用’value=”{0}"’.format(value),注意“0”的花括弧{}外面还要引号"".
3、针对key=value的键值对,我们用’value={0}’.format(value),“0”的花括弧{}外面没有引号"".

总结

在python的format()格式化中有这么一个细节:
‘iCode="{0}"’.format(“111”)得到的icode是一个带""的字符串:icode=“111”;
‘{0}’.format(“111”)得到的是这样的一个对象iCode=111;

也就是说:
——当我们需要key-“value"形式的时候就用’”{0}"’.format(“xxxx”)格式化;
——当我们需要key-value形式的时候就用’{0}’.format(“xxxx格式化”)

补充:

当我们在app----build.gradle里面配置多平台打包的设置时,我们·通常会有这样的配置文件:

***Test {
    dimension "app"
    applicationId "com.ant.test"
    buildConfigField 'String', "softwareNo", '"5"'
    buildConfigField 'Integer', "versionCode", '55'
    // 修改 AndroidManifest.xml 里渠道变量
    manifestPlaceholders = [CHANNEL_VALUE: "Test",
                            app_icon     : "@mipmap/icon",
                            // 此方式可直接在 manifest 中通过 ${icon} 进行占位引用;
                            // 或者在main同级中创建不同渠道后创建 res 资源文件
                            icon         : "@mipmap/icon",
    ]
}

***OnLine {
    dimension "app"
    applicationId "com.ant.online"
    buildConfigField 'String', "softwareNo", '"8"'
    buildConfigField 'Integer', "versionCode", '55'
    // 修改 AndroidManifest.xml 里渠道变量
    manifestPlaceholders = [CHANNEL_VALUE: "OnLine",
                            app_icon     : "@mipmap/icon",
                            // 此方式可直接在 manifest 中通过 ${icon} 进行占位引用;
                            // 或者在main同级中创建不同渠道后创建 res 资源文件
                            icon         : "@mipmap/icon",
    ]
}

配置里面有一个软件版本的参数“softwareNo”需要注意,它用于控制不同平台的app版本升级用。

“versionCode”参数则是用于配置不同平台下的版本。需要注意的是,他是个Integer类型的数据,因此前面的数据类型那里,是Integer,然后value值那里,则是单引号模式:‘55’,这点跟String类型的参数不一样。

然后可以直接在代码里面调用softwareNo/versionCode参数,不用做如下配置:

buildTypes {
        release {
            ......            
        }
        debug{
            ......
        }
    }

通常情况下,如果我们没有做多平台区别升级的话,我们用一个参数就可以了,将其配置在gradle.properties里面,然后再在app----build.gradle里面做如下配置即可:

android {
	buildTypes {
        release {
            ......
            buildConfigField 'String', "softwareNo", "\"${softwareNo}\""
        }
        debug{
            ......
            buildConfigField 'String', "softwareNo", "\"${softwareNo}\""
        }
    }
}

然后经过编译之后,就可以直接在代码里面引用 "softwareNo"这个参数了。
甚至就连上面那样的信息我们都可以不用配置,直接引用app----build.gradle里面的这个参数“versionCode”即可。

但是在多平台区别升级的时候,做了上面的配置(“***Test”、“***OnLine”…),那么我们就不需要在gradle.properties里面配置"softwareNo"这个参数了,直接引用

“Test/OnLine---->buildConfigField对应的字段“softwareNo”

即可。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值