你也能够查看我的其它同类文章。也会让你有一定的收货

关于使用Gradle来控制版本号和生成不同版本号的代码。我总结了三篇文章,网上关于这些知识,都比較零散。我在学习这些的之前。根本不知道还有这种方法。所以说不知道并不可怕,可怕的是不知道自己不知道。相信这三篇文章,会给你不少灵感

前言

在项目中,我们有时会须要依据不同的项目环境,使用不同的项目变量,

举例:

在測试环境中须要app訪问的server地址是測试server

正式公布下的app须要訪问正式server。

能够使用以下三种技术来满足要求:

使用 gradle 在编译时动态设置 Android resValue

改动 res value 的方式。比方改动 strings.xml 文件里的 AppName 的值

在你的 gradle 文件 buildTypes 或者 productFlavors 以下,如 release 体内写上相似:

resValue "string", "AppName", "app1"

意为把名为 AppName 的 string value 值改为 app1

使用 gradle 在编译时动态设置 Android BuildConfig

在你的 gradle 文件 buildTypes 或者 productFlavors 以下,如 release 体内写上相似:

buildConfigField "String", "ENDPOINT", "\"http://example.com\""

gradle sync 一下后,BuildConfig.ENDPOINT 就会被赋值为 http://example.com 就能够供 Java 代码调用了。

以下介绍怎样设置标签中的变量,怎样使用标签中的变量,请參考这里

使用 gradle 在编译时动态设置 Android Manifest

方法一:(不推荐)

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

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

android:name="UMENG_CHANNEL"/>

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

android.applicationVariants.all{ variant ->

println "${variant.productFlavors[0].name}"

variant.processManifest.doLast{

copy{

from("${buildDir}/manifests"){

include "${variant.dirName}/AndroidManifest.xml"

}

into("${buildDir}/manifests/$variant.name")

filter{

String line ->line.replaceAll("UMENG_CHANNEL_VALUE", "${variant.productFlavors[0].name}")

}

variant.processResources.manifestFile = file("${buildDir}/manifests/${variant.name}/${variant.dirName}/AndroidManifest.xml")

}

}

}

方法二:使用manifestPlaceholders改变< meta-data>(推荐)

而在新版本号的gradle中,processManifest这种方法被移除掉了,而提供了一个新的功能manifestPlaceholders。我们能够在AndroidManifest中定义一个变量。在build.gradle中动态的替换掉,十分方便。语法也十分简单。

对照上面的功能,我们须要动态替换友盟的appkey,须要在AndroidManifest中定义一个变量

android:name="UMENG_APPKEY"

android:value="${umeng_app_key}"/>

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

buildTypes {

debug {

manifestPlaceholders = [umeng_app_key: "你替代的内容"]

}

release {

manifestPlaceholders = [umeng_app_key: "你替代的内容"]

}

develop {

manifestPlaceholders = [umeng_app_key: "你替代的内容"]

}

}

注意:这里的“你替代的内容”。不能为特殊关键词,比方:TRUE,否则在Java代码中获取不到meta-data中的值。

错误演示样例:

manifestPlaceholders = [oem: "TRUE"]

执行gralde clean build。你就能够生成不同的appkey的apk,是不是感觉好多了。^ ^

假设你想要替换多个变量,假如你须要两个变量要替换,须要依照以下形式进行

android:name="UMENG_APPKEY"

android:value="${umeng_app_key}"/>

android:name="UMENG_SECRET"

android:value="${umeng_app_secret}"/>

buildTypes {

debug {

manifestPlaceholders = [umeng_app_key: "你替代的内容",umeng_app_secret:"你要替换的内容"]

}

...

}

android重新编译res,使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中lt;meta-datagt;变量的值...相关推荐

  1. 使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中lt;meta-datagt;变量的值...

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/49247815 文章出自:薛瑄的博客 你也能够查看我的其它同类文章.也会让你有一定的 ...

  2. python 动态编译代码,Python:在运行时动态创建函数

    How to dynamically create a function in Python? I saw a few answers here but I couldn't find one whi ...

  3. android textview动态设置,android – 如何动态设置文本到TextView?

    我想在活动开始时显示连接的ssid和ip地址.它包含一个图像视图(用于标题,因为我没有使用操作栏)和4个文本视图(ssid标签,ssid值,ipaddr标签和ipaddr值) 我已经测试了获取ssid ...

  4. android gradle 设置,android gradle配置指南

    Gradle简介 Gradle 是一个基于Ant和Maven概念的项目自动化建构工具.它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,这比我们的ANT使用XML构建配置要灵活的多.在 ...

  5. AndroidStudio自定义属性xmlns无法识别问题解决in Gradle projects,always use http://schemas.android.com/apk/res-auto

    正如in Gradle projects,always usehttp://schemas.Android.com/apk/res-auto for custom attributes所说的 将ecl ...

  6. 多种方式实现动态替换Android默认桌面Launcher

    多种方式实现动态替换Android默认桌面Launcher 文章目录 多种方式实现动态替换Android默认桌面Launcher 背景简介 技术方案 三种方案 方案一 方案二 方案三 风险 背景简介 ...

  7. android优化中国风应用、完整NBA客户端、动态积分效果、文件传输、小说阅读器等源码...

    Android精选源码 android拖拽下拉关闭效果源码 一款优雅的中国风Android App源码 EasySignSeekBar一个漂亮而强大的自定义view15 android仿蘑菇街,蜜芽宝 ...

  8. android studio 编译高级篇-gradle多版本编译,定制任务

    导读 本文旨在介绍Gradle构建的一些高级功能,包含了多版本编译.定制任务等功能: 为相同的app构建多个版本 如果在Gradle的过程中添加定制的任务 如何使用android库module 3.构 ...

  9. android gradle resvalue,在插件中Gradle使用resValue在资源文件中添加信息,导致realease版本编译失败...

    问题详细描述 Detailed description of the problem 由于在插件中无法读取自身的meta-data,因此在资源文件中做一些分渠道分发的内容填充.但是使用resValue ...

最新文章

  1. stutBar的使用
  2. post from open live writer
  3. Google App Engine Java功能和命名空间API
  4. Flutter AnimatedOpacity 实现透明度渐变动画效果
  5. 计算数字1至10的总和
  6. Linux的软连接、硬链接和find命令
  7. java vips 算法_[Java] 22G传智播客java JavaEE+物联云计算 就业班(非基础班) 视频...
  8. STM32F103--移植FreeRTOS完整教程
  9. 使用USB驱动虚拟一个声卡
  10. 数据架构选型必读:2021上半年数据库产品技术解析
  11. 支付宝第三方应用代调用API关系说明
  12. win8计算机时间同步时出错,win10电脑windows time同步出错的解决办法
  13. python导入文件夹下所有包_python 通过文件夹导入包的操作
  14. Jupyter更改默认浏览器
  15. 58 Hive案例(访问时长统计)
  16. 平移计算机图形学代码注释,求代码注释:计算机图形学的OpenGL画四面体。高手来吧。争取每句都注释下。谢谢...
  17. 学习 Python 可以快速赚钱吗?
  18. 进程间的通信方式与区别
  19. 近代物理实验 光泵磁共振 原理 数据 思考题
  20. Spring Boot之定时任务

热门文章

  1. PCL PCD文件读写
  2. python调用shell脚本
  3. AI和大数据结合,智能运维平台助力流利说提升核心竞争力
  4. 聚焦数字化智慧安防的新型社区
  5. 在 Apache Spark 中利用 HyperLogLog 函数实现高级分析
  6. 为拯救爸妈朋友圈,达摩院造了“谣言粉碎机” 1
  7. k8s 集群居然可以图形化安装了?
  8. 国家能源集团携手华为首次部署矿鸿操作系统,开创工控新纪元
  9. 我画了35张图,就是为了让你深入 AQS!
  10. 漫画:程序员战力图鉴