• 使用 gradle 在编译时动态设置 Android resValue / BuildConfig / Manifes中<meta-data>变量的值


           转载请说明来源: 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

    以一颗童心善待生活
  • 相关阅读:
    vim tab 和4个空格
    python 入门
    pyenv 以及 virtualenv
    Redis Cluster 理论知识
    使用Redis SETNX 命令实现分布式锁
    go runtime scheduler
    LeetCode Valid Parentheses
    LeetCode Rotate Image
    leetcode
    HDU 3657 Game(取数 最小割)经典
  • 原文地址:https://www.cnblogs.com/lizhilin2016/p/7390079.html
Copyright © 2020-2023  润新知