转载请说明来源: 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文件中定义如下:

  1. 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 文件中引用如下:
  1. 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"
    }
  2.  
  3. signingConfigs {
    mycustom {
    storeFile file(filePath)
    storePassword pwd
    keyAlias alias
    keyPassword pwd
    }
    }
    2. 使用gradle 在编译时动态配置Android Manifest:
    在新版本的gradle中, processManifest这个方法被移除掉了, 而提供了一个新的功能manifestPlaceholders, 我们可以在AndroidManifest中定义一个变量, build.gradle中动态的替换掉, 十分方便, 语法也十分简单.
    对比上面的功能, 我们需要动态替换bugly appkey, 需要在AndroidManifest中定义一个变量
  1. <!-- 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文件中定义
  1. buildTypes {
    release{
    manifestPlaceholders = [bugly_app_id: buglyAppId, bugly_channel: buglyChannel, bugly_version: versionName]
    signingConfig signingConfigs.mycustom
    }
  1. }
    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. Capture the Flag ZOJ - 3879(模拟题)

    In computer security, Capture the Flag (CTF) is a computer security competition. CTF contests are us ...

  2. 允许MS SqlServer远程连接

    实际问题: 服务器192.168.0.103上的SQL Express数据库实例,局域网内其余机器的Sql Server Management Studio都无法连接. 在本机上,可以用“.\SqlE ...

  3. dinic算法求最大流的学习

    http://trp.jlu.edu.cn/software/net/lssx/4/4.38.htm http://www.cnblogs.com/zen_chou/archive/0001/01/0 ...

  4. 解决maven打包编译出现File encoding has not been set问题

    maven打包编译时后台一直输出警告信息 [WARNING] File encoding has not been set, using platform encoding GBK, i.e. bui ...

  5. 【ACM】hdu_zs3_1006_AB_201308101123

    A/B Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)Total Submission ...

  6. POJ River Hopscotch 二分搜索

    Every year the cows hold an event featuring a peculiar version of hopscotch that involves carefully ...

  7. 开源GIS软件 4

    空间数据操作框架 Apache SIS Apache SIS 是一个空间的框架,可以更好地搜索,数据聚类,归档,或任何其他相关的空间坐标表示的需要. kvwmap kvwmap是一个采用PHP开发的W ...

  8. Linux - Virsh

    virsh命令 suspend resume dumpxml   KVM平台以存储池的形式对存储进行统一管理,所谓存储池能够理解为本地文件夹.通过远端磁盘阵列(iSCSI.NFS)分配过来磁盘或文件夹 ...

  9. PKU 2774 Long Long Message (后缀数组练习模板题)

    题意:给你两个字符串.求最长公共字串的长度. by:罗穗骞模板 #include <iostream> #include <stdio.h> #include <stri ...

  10. [PWA] Check Online Status by using the NavigatorOnLine API

    Even if you have your application fully cached, you couldn’t perform any external request without in ...