当前位置:   article > 正文

使用manifestPlaceholders替换变量_java 代码怎么动态修改设置manifestplaceholders 参数

java 代码怎么动态修改设置manifestplaceholders 参数

原文地址:https://blog.csdn.net/u011904605/article/details/54664831

前言

在项目中,我们有时会需要根据不同的项目环境,使用不同的项目变量,比如说,我在测试环境中需要我的app访问的服务器地址是测试服务器上,而正式发布下的app需要访问正式服务器。在这种情况下,我们可以将这个变量放在AndroidManifest文件中,根据不同的编译类型生成服务器指向不同的app。

实现

在之前版本的gradle中,大部分的思路都是在AndroidManifest中定义一个变量,然后在编译的时候,找出那个AndroidManifest中的变量,将它替换掉。

如友盟的多渠道打包,在原来的 AndroidManifest.xml 文件中添加:

 
  
  1. <meta-data android: value= "UMENG_CHANNEL_VALUE"
  2.       android:name= "UMENG_CHANNEL"/>

然后使用在build.gradle中找出UMENG_CHANNEL_VALUE这个值,并且替换掉

 
  
  1. android.applicationVariants.all{ variant ->
  2. println "${variant.productFlavors[0].name}"
  3. variant.processManifest.doLast{
  4. copy{
  5. from( "${buildDir}/manifests"){
  6. include "${variant.dirName}/AndroidManifest.xml"
  7. }
  8. into( "${buildDir}/manifests/$variant.name")
  9. filter{
  10. String line ->line.replaceAll( "UMENG_CHANNEL_VALUE", "${variant.productFlavors[0].name}")
  11. }
  12. variant.processResources.manifestFile = file( "${buildDir}/manifests/${variant.name}/${variant.dirName}/AndroidManifest.xml")
  13. }
  14. }
  15. }

而在新版本的gradle中,processManifest这个方法被移除掉了,而提供了一个新的功能manifestPlaceholders,我们可以在AndroidManifest中定义一个变量,在build.gradle中动态的替换掉,十分方便,语法也十分简单。对比上面的功能,我们需要动态替换友盟的appkey,需要在AndroidManifest中定义一个变量

 
  
  1. <meta- data
  2. android:name= "UMENG_APPKEY"
  3. android:value= "${umeng_app_key}"/>

接着,我们在build.gradle文件中根据不同的环境,生成不同appkey的apk。

 
  
  1. buildTypes {
  2. debug {
  3. manifestPlaceholders = [umeng_app_key: "你替代的内容"]
  4. }
  5. release {
  6.   manifestPlaceholders = [umeng_app_key: "你替代的内容"]
  7. }
  8. develop {
  9.    manifestPlaceholders = [umeng_app_key: "你替代的内容"]
  10. }
  11. }

运行gralde clean build,你就可以生成不同的appkey的apk,是不是感觉好多了。^ ^

如果你想要替换多个变量,假如你需要两个变量要替换,需要按照下面形式进行

 
  
  1. <meta- data
  2. android:name= "UMENG_APPKEY"
  3. android:value= "${umeng_app_key}"/>
  4. <meta- data
  5. android:name= "UMENG_SECRET"
  6. android:value= "${umeng_app_secret}"/>
 
  
  1. buildTypes {
  2. debug {
  3. manifestPlaceholders = [umeng_app_key: "你替代的内容",umeng_app_secret: "你要替换的内容"]
  4. }
  5. ...
  6. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/265368
推荐阅读
相关标签
  

闽ICP备14008679号