转载请说明来源: 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.csdn.net/u014011112/article/details/55511615
    http://blog.csdn.net/xx326664162/article/details/49247815

使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中<meta-data>变量的值的更多相关文章

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

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

  2. 设置与查看Linux系统中的环境变量

    大家好,我是良许. 大家都知道,在 Linux 系统中,有环境变量和 Shell 变量这两种变量. 环境变量是在程序及其子程序中全局可用的,常常用来储存像默认的文本编辑器或者浏览器,以及可执行文件的路 ...

  3. 【Android】TextView动态设置android:drawableLeft|Right|Top|Bottom,SetColor

    Android中有时需动态设置控件四周的drawble图片,这个时候就需要调用 setCompoundDrawables(left, top, right, bottom),四个参数类型都是drawa ...

  4. JMeter非GUI方式运行时动态设置线程组及传参

    http://blog.csdn.net/selingchen/article/details/48106517 在使用JMeter进行性能测试自动化时,可能会有如下需求: 1.指定运行多少线程,指定 ...

  5. DevExpres表格控件运行时动态设置表格列

    本文是系列文章,陆续发表于电脑编程技巧与维护杂志. DevExpres产品是全球享有极高声誉的一流控件套包产品!国内典型用户包括:用友.金蝶.神州数码.工信部.中国石化.汉王科技等众多大中型科技型企业 ...

  6. ndk编译时的通用Android.mk文件

    LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := live555 MY_SRC_PATH := $(LOCAL_PA ...

  7. JMeter命令行方式运行时动态设置线程数及其他属性(动态传参)

    在使用JMeter进行性能测试时,以下情况经常出现: 1.测试过程中,指定运行的线程数.指定运行循环次数不断改变: 2.访问的目标地址发生改变,端口发生改变,需要改写脚本. 上面的问题在GUI中,直接 ...

  8. SpringBoot多环境部署,在启动时动态设置相应的配置文件

    项目中,往往在测试环境和正式环境拥有不同的配置,例如数据库连接,第三方库的appkey等.这时候,我们就要在不同的环境启用不同的配置 下面新建三个文件,分别表示开发环境,生产环境和测试环境的配置文件 ...

  9. scrapy实战9动态设置ip代理从数据库中随机获取一个可用的ip:

    在目录下创建tools(python package) 在tools中创建crawl_xici_ip.py文件写入代码如下: #coding=utf-8 import requests from sc ...

随机推荐

  1. 如何在redhat 7上安装VNC服务器

    平时我们基本上都是用xshell或者用putty远程我们的linux服务器,如果我们的linux服务器安装了图型化界面那我们又该如何远程使用我们的图形化界面呢?下面我们用vnc来实现远程我们的linu ...

  2. 65.dynamic mapping

    主要知识点: 理解dynamic mapping 定制dynamic mapping 更改default dynamic mapping     一.理解dynamic mapping 1.基本概念 ...

  3. 《零压力学Python》 之 第四章知识点归纳

    第四章(决策和循环)知识点归纳 if condition: indented_statements [ elif condition: Indented_statements] [else: Inde ...

  4. WPF Style设置和模板化Template

    WPF样式设置和模板化是一套功能(样式,模板,触发器和演示图版),可以为产品设置统一外观.类似于html的css,可以快速的设置一系列属性值到控件. 案例:ButtonStyle 这里创建了一个目标类 ...

  5. 我的ArcGis9.3 到Arcgis10.0 升级步骤

    因为之前一直安装的是Arcgis 9.3 版本,领导发了个10.0版本说,该升级了,结果就开始了漫漫的升级路. 个人操作过程,只是个别. 一.卸载Arcgis9.3 这个过程真说是艰辛啊. 首先,卸载 ...

  6. device busy

    在mount的时候经常会有device busy,这通常是因为该目录被某个用户或者进程使用.这时候可以用如下命令: fuser mount point 来看一下该mount point被哪个进程占用. ...

  7. CF #324 DIV2 C题

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...

  8. 【转】shell中的内建命令, 函数和外部命令

    原文:http://www.cnblogs.com/xkfz007/archive/2011/10/13/2209571.html linux命令有内部命令和外部命令之分.内部命令实际上是shell程 ...

  9. IntelliJ IDEA 16 EAP新特性一览

    IntelliJ IDEA 16 EAP新特性一览 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs IntelliJ I ...

  10. linux网络測试命令

    ping  192.168.1.103  -c  3 ping我的IP3次 port探測 telnet  192.168.1.103  80 路由跟踪 traceroute  www.imooc.co ...