亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Android應用開發最佳實踐:馬甲包配置管理

標簽:
Android

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

优化前

webp

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


如图所示由于我们采用的是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,否则中文会出现乱码。



作者:苌蓊芪
链接:https://www.jianshu.com/p/29cb209197bf


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消