Android应用开发最佳实践:马甲包配置管理

在过去的半年时间中,由于行业大环境的恶化,App产品需求一直处于停滞状态,接到的都是市场导向的马甲包需求。随着马甲包的不断增多,build.gradle文件的内容长度开始变得难以接受,于是优化之旅随之展开。

优化前

由于数据敏感等原因,进行了简化脱敏处理

如图所示由于我们采用的是productFlavor来制作马甲包,所以造成build.gradle变长的元凶也就是productFlavor节点,这一次的优化也就针对它来进行。

在我们的APP中,针对每个马甲包配置的第三方key或其它属性共有22个,当马甲包数量到达10个之后,单这部分配置就达到了近300行,每次要新增加一个马甲,需要费不少时间在庞大的文件中找到空间去新增配置,且在一大堆文字当中,容易遗漏需要修改的配置。

优化后

Android项目中的properties大阅兵一文中,我曾为了实现脱敏将一些Key放到local.properties中,然后在build.gradle中去动态读取。这一次依然可以用这种形式,将这些配置抽到独立的配置文件中以供读取。

创建product对应的配置文件

首先,在项目根目录下创建一个config目录来规整马甲包的配置文件。然后在config目录下,创建若干命名格式为${flavor_name}_config.properties的配置文件。最后将每个马甲的参数以Key=Value的形式配置到对应的文件中,并删除build.gradle中的这些配置。

注意,${flavor_name}必须和build.gradle中的productFlavors的key保持一致,否则会造成无法正确读取到配置。

修改build.gradle

在完成配置文件的创建工作之后,就需要在build.gradle中根据需要去读取这些配置了,这里不多做解释,直接上代码:

android {
    flavorDimensions "default"

    productFlavors {
        product1 {}
        product2 {}
        product3 {}
    }

    productFlavors.each { flavor ->

        def props = new Properties()
        file("../config/${flavor.name}_config.properties").withInputStream { props.load(new InputStreamReader(it,"utf-8")) }

        flavor.dimension "default"

        def application_id = props.getProperty("application_id")
        def app_name = props.getProperty("app_name")
        def color_primary = props.getProperty("color_primary")
        def color_accent = props.getProperty("color_accent")
        def primary_text_dark = props.getProperty("primary_text_dark")
        def version_name = props.getProperty("version_name")
        def scheme = props.getProperty("scheme")
        def gio_project_id = props.getProperty("gio_project_id")
        def gio_scheme = props.getProperty("gio_scheme")
        def um_key = props.getProperty("um_key")
        def amap_key = props.getProperty("amap_key")
        def jpush_key = props.getProperty("jpush_key")
        def bugly_key = props.getProperty("bugly_key")

        flavor.applicationId application_id
        flavor.versionName version_name 
        flavor.manifestPlaceholders = [
                JPUSH_PKGNAME       : application_id,
                ROUTER_SCHEME       : scheme,
                JPUSH_APPKEY        : jpush_key,
                growingio_url_scheme: gio_scheme,
                UM_KEY              : um_key,
                AMAP_KEY            : amap_key
        ]

        flavor.resValue "color", "colorPrimary", color_primary
        flavor.resValue "color", "colorAccent", color_accent
        flavor.resValue "color", "primary_text_dark", primary_text_dark
        flavor.resValue "string", "app_name", app_name
        flavor.resValue "string", "growingio_project_id", "\"${gio_project_id}\""
        flavor.resValue "string", "growingio_url_scheme", gio_scheme
        flavor.buildConfigField "String", "AMAP_KEY", "\"${amap_key}\""
        flavor.buildConfigField "String", "ROUTER_SCHEME", "\"${scheme}\""
        flavor.buildConfigField "String", "UM_KEY", "\"${um_key}\""
        flavor.buildConfigField "String", "BUGLY_KEY", "\"${bugly_key}\""
}

这里需要注意的是,在将配置文件加载到Properties中时,必须要明确定义charset_name,否则中文会出现乱码。

最后

经过上面的一系列修改,最终得到的效果是,build.gradle内容长度从500+降低到300-,且后续有新马甲需求的时候,该文件只会增加1行/马甲包

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

推荐阅读更多精彩内容