使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中变量的值

时间:2024-08-05 21:06:26

转载请说明来源: http://www.cnblogs.com/lizhilin2016/p/7390079.html

  最近lz 在开始做一个新的Demo, 在项目中集成了bugly用于收集项目中的崩溃日志, 集成Bmob用于作为后台数据库, 集成了友盟用于集成第三方分享, 当然了, 这些都有很多方案可以选择, 到底采用哪种还是根据自己的喜好或者主要说是公司的具体要求, lz 这里主要说的是, 集成这些东西, 每次都要在manifest.xml  还有build中配置一些参数, 而且有些参数还不止要配置一遍, 那么问题就来了--> 使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中<meta-data>变量的值?

总结了几篇文章, 网上关于这些知识也比较零散, 我在学习这些之前, 也根本不知道还有这样的方法. 所以说不知道并不可怕, 可怕的是不知道自己不知道.

1. 全局变量配置, 可以用于统一管理版本号或者依赖库, 在根目录build.gradle文件中定义如下:

ext {
compileSdkVersion = 25
buildToolsVersion = "25.0.2"
minSdkVersion = 16
targetSdkVersion = 25
versionCode = 1
versionName = "1.0"
applicationId = "www.lz.com.XXX"
filePath = "lz.jks"
alias = "alias"
pwd = "pwd"
v7version = "25.3.1"
buglyAppId = "XXX"
buglyChannel = "Android 端 2017-08-18 测试版"
}
app/build.gradle 文件中引用如下:
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId rootProject.ext.applicationId
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
} signingConfigs {
mycustom {
storeFile file(filePath)
storePassword pwd
keyAlias alias
keyPassword pwd
}
}
2. 使用gradle 在编译时动态配置Android Manifest:
在新版本的gradle中, processManifest这个方法被移除掉了, 而提供了一个新的功能manifestPlaceholders, 我们可以在AndroidManifest中定义一个变量, 在build.gradle中动态的替换掉, 十分方便, 语法也十分简单.
对比上面的功能, 我们需要动态替换bugly 的appkey, 需要在AndroidManifest中定义一个变量
<!-- Bugly 配置APP信息 start -->
<!-- 配置APP ID -->
<meta-data
android:name="BUGLY_APPID"
android:value="${bugly_app_id}" />
<!-- 配置APP版本号 -->
<meta-data
android:name="BUGLY_APP_VERSION"
android:value="${bugly_version}" />
<!-- 配置APP渠道号 -->
<meta-data
android:name="BUGLY_APP_CHANNEL"
android:value="${bugly_channel}" />
<!-- Bugly 配置APP信息 end -->
接着, 我们在app/build.gradle文件中定义, buglyAppId 按照上面方法一, 在根目录build.gradle文件中定义
buildTypes {
release{
manifestPlaceholders = [bugly_app_id: buglyAppId, bugly_channel: buglyChannel, bugly_version: versionName]
signingConfig signingConfigs.mycustom
}
}
3. 由衷感谢这两篇文章的作者:
    http://blog.****.net/u014011112/article/details/55511615
    http://blog.****.net/xx326664162/article/details/49247815