【Gradle 学习】(九)manifestPlaceholders 处理占位符
AndroidManifest 里的占位符
在 defaultConfig{} 还有个很常用的配置- mainifestPlaceholders,顾名思义,这个属性是 manifest 的占位符,和 AndroidManifest.xml 相关的。
AndroidManifest.xml 这个文件并不陌生了,其实很多配置都是在这里定义的,当我们使用三方应用的时候,三方应用的key,或者统计分析的渠道都这里配置。
比如使用友盟统计分析平台,我们需要根据渠道进行统计,比如 google,华为等渠道的活跃度,埋点数据等。
使用友盟的 SDK 需要在 AndroidManifest 中配置一个名为 UMENG_CHANNEL
的 meta-data
<meta-data
android:name="UMENG_CHANNEL"
android:value="Umeng"
/>
这个 meta-data 本质是一个 bundle,这里这个值这里的 value 是 Umeng
, 这个值标识的就是 apk 是哪个渠道,如果要发布多个渠道,可以在 manifestPlaceholders 定义这个值。这里 meta-data 的 value 就需要用一个占位符的方式表达,表达方式如下
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}"
/>
上面 ${UMENG_CHANNEL_VALUE}
就是一个占位符,在 gradle 的 defaultConfig{} 中 通过 manifestPlaceholders 动态替换 AndroidManifest 文件里定义的占位符:
android {
defaultConfig {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: 'dev']
}
}
这段代码块的意思就是 ${UMENG_CHANNEL_VALUE}
占位符会被 dev 这个字符串所替换,也就是 UMENG_CHANNEL 值为 dev。
除了 defaultConfig 可以这样设置,buildType 和 productFlavor 也都可以配置 manifeatPlaceholders ,它的本质是一个 Map,所以也可以使用键值对的方式定义,可以使用 put(value, key)
。
productFlavor 中应用
我们看一下实际项目通常都怎么使用呢?
继续上面的例子,我们可以根据不同的渠道为统计定义不同渠道值,我们前面已经学习过,不同渠道产品的定制,设置的是 productFlavor,那么就可以这样定义
android {
productFlavors {
google{
applicationId "cn.tina.google"
manifestPlaceholders.put("UMENG_CHANNEL_VALUE",'google')
}
huawei{
applicationId "cn.tina.huawei"
manifestPlaceholders.put("UMENG_CHANNEL_VALUE",'huawei')
}
}
}
这样分别为不同的产品定义不同的友盟渠道值。这里我们也可以用一下更灵活的方式处理,循环每个productFlavor,并把他们的 UMENG_CHANNEL_VALUE
设置为自己的 name,就不需要每个渠道都去定义了,这也可见 Gradle 的强大和灵活。
productFlavors.all { flavor ->
manifestPlaceholders.put("UMENG_CHANNEL_VALUE",name)
}
buildType 中应用
除了具体的产品需要一些定制,我们在开发过程中也需要不同的环境配置,比如配置极光推送,测试环境使用的是测试 key,正式环境使用的正式 key,也可以通过这种方式来动态替换。
<meta-data
android:name="JPUSH_APPKEY"
android:value="${JPUSH_APPKEY}"
/>
buildTypes{} 中动态配置 key
android {
buildTypes {
debug {
manifestPlaceholders = [JPUSH_APPKEY : "testKey"]
}
release {
manifestPlaceholders = [JPUSH_APPKEY : "formalKey"]
}
}
}
其他应用
除了动态处理三方的一些占位,meta-data 中的值我们也是可以拿到的,所以当然也可以自己来定义一些想动态处理的值,能想到这里,可以应用的场景就更多了。
在 gradle 的脚本文件中本身也可以使用字符串占位方式,那么这里的 value 值的定义又可以有多种方式,如果配合着 gradle.properties 使用就更加灵活了。
如果使用了 gradle.properties 做 key-value 的定义,支持Gradle编译功能的插件或工具也可以使用,比如jenkins。是不是很妙!
这里多思考一下,很多配置会变得更加灵活。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanejii
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24