android gradle加载配置文件参数

注 此文是之前配置的方案,好处在于通过文件的方式隔离配置参数,坏处在于不够简洁,在下目前提供一种更加便捷的环境配置方案,后来的小伙伴可以自行选择之,个人倾向于此种配置方案,对应的文章地址为 android 更为简洁的gradle 参数配置 - 简书

此文只是简单的通过配置变量的方式实现配置信息之间的切换,除去了频繁更改地址、开关、AppKey等其它的配置信息。

本篇文章简单的使用了gradle的生命周期,有兴趣的童鞋可以自行百度了解一下。

一般android studio刚创建的project的setting.gradle文件只包括一行:  

这一行的意思是构建mutiProject,按照正常的逻辑来说,其实android studio创建的每个module都算是一个单独的Project,而gradle通过构建此文件,将这些项目统一构建为mutiProject。

gradle的构建过程简单理解如下所示:

setting.gradle文件只有一份,这也就意味着整个mutiProject的gradle对象只有一份,它可以在任何project的gradle文件当中获取到这个对象。

build.gradle文件有多份,每个module下存在于单个build.gradle文件,这就意味着,每个module都具备单独的project对象,这就意味着每个module都是一个单独的project。

setting.gradle文件对应着gradle对象的初始化,那一般的初始化操作可以在此gradle脚本文件当中运行,但不要原始生成的include标签抹去,这是gradle构建mutiProject关键所在。

首先,我在项目当中配置了debug.properties以及release.properties,这两个文件:

第二步,在gradle.properties文件当中定义一个boolean值IS_RELEASE_MODE,这个变量就是加载配置了debug和release两个版本的配置文件的开关,如果有多种配置信息的,请改用字符串定义变量。,true表示Release参数,false代表debug参数。

注:此处不得不说一下,gradle.properties文件当中的属性,我暂且这样理解为,在setting.gradle文件初始化gradle对象的时候,这个文件当中的属性已经默认加载到这个gradle对象当中,所以这个文件当中定义的属性是可以直接调用。

第三步,setting.gradle当中读取文件当中定义属性代码展示如下(请配合参考groovy语言,$符是脚本语言的通用处理符号)

同时,如果想后期读取自己定义的properties文件,这时候就需要用来gradle对象的扩展属性,对于gradle的扩展属性是通过gradle.ext标识符来完成的,特别声明,gradle.ext.属性名只需要在第一次赋值的时候需要带上ext标签,在后面的过程可以直接gradle.属性名进行任意的更改和取值。

调用读取配置文件的方法

基本参数配置完毕,可以通过gradle指令(gradlew clean指令就可观察对应扩展属性的值)在IS_RELEASE_MODE=true的情况下,输出如下所示。

如果诸位童鞋觉得这个指令等待时间过长,那就自定义一个task,运行指令如上图所示,task的代码块是定义在project 类当中,所以只能在build.gradle文件当中进行配置:

以上gradle的ext扩展属性对应配置脚本信息已经完毕。而这里需要解释的是上文当中有两种读取配置文件属性的处理方式,下文会具体指出其中需要注意的地方。

第四步,在依赖的最顶层的libray 当中的build.gradle中做如下配置,为什么说要在最顶层的libray当中做这个配置,这是由于每个project(也就是as当中的module)都会在build当中生成对应自己build.gradle当中配置的BuildConfig.java类,所以,把这些配置信息放到最顶层的库,是为了其它依赖者也能够公用这个库的BuildConfig.java类。具体配置如下:

gradle编译完毕之后会在当前build.gradle对应的project的build目录下生成BuildConfig类:

同时,在gradle.properties当中将IS_RELEASE_MODE=false,BuildConfig编译完毕之后就能完成debug.properties文件属性值的切换。

到了这个地方,按照以上步骤走,基本上可以解决多个版本配置信息之间的切换了。但上面提到的两种属性处理方式,在这里,我就通过未定义到BuildConfig的TEST7 属性来说明具体原因,这个点具体如下所示,如果我将TEST5采用非字符串的处理方式,BuildConfig如下所示:

这就导致BuildConfig.java文件默认报错,我想大家还有一种比较简单的处理方式,那就是在配置文件当中直接对需要加在字符串的直接加上字符串就行了,我为了统一性,采用代码控制了这个问题,为了配置文件的属性的统一性。

下面单独说下这个TEST7属性的处理方式:在第三方sdk当中经常有<meta-data />标签形式定义的APP_KEY模式,这个就可以通过android 代码块中的maniPlaceHolder实现。

manifestPlaceHolders可以在androidManifest.xml文件当中读取定义的属性
Manifest文件通过manifestPlaceHolders获取gradle定义的属性

我想大家已经get到这个TEST7使用的点了,对,没错,它一般用于和AndroidManifest.xml完成变量的交互,它采用非字符串读取方式的处理方式,那是因为在默认加载到AndroidManifest.xml中的这个变量会被处理为字符串格式,也可以简单理解,系统内部已经做了字符串的添加操作,这时候再来一次的话,就会导致清单文件的这个变量读取成带字符串的值,这会导致第三方SDK或其它情况的错误。(请注意,有兴趣的同学可以按照字符串方式处理,然后反编译,可以很清楚的在清单配置文件当中看到这个变量的value值。)

demo指向,能用代码说话,就别说废话了--https://github.com/kaycool/EnvironmentConfigDemo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,724评论 6 342
  • 这一章主要针对项目中可以用到的一些实用功能来介绍Android Gradle,比如如何隐藏我们的证书文件,降低风险...
    acc8226阅读 7,551评论 3 25
  • 前言 为什么需要学Gradle? Gradle 是 Android 现在主流的编译工具,虽然在Gradle 出现之...
    真笨笨鱼阅读 1,487评论 0 0
  • 1.介绍 如果你正在查阅build.gradle文件的所有可选项,请点击这里进行查阅:DSL参考 1.1新构建系统...
    Chuckiefan阅读 12,111评论 8 72