在过去的半年时间中,由于行业大环境的恶化,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,否则中文会出现乱码。

作者:苌蓊芪

链接:https://www.jianshu.com/p/29cb209197bf

android app套壳马甲开发,Android应用开发最佳实践:马甲包配置管理相关推荐

  1. android app套壳马甲开发,【不二之选】国内Android马甲包套壳上架源头

    国内Android马甲包套壳上架源头例如,在覆盖总量变化的几个区间中,仅进入分类榜的App关键词覆盖数降低.不变.少量增加(1~10)的比例更多:而总榜App关键词覆盖总量增加超过10以上的App比例 ...

  2. 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法...

    在学习NDK中,当我在项目的bin/classes目录下使用javah命令生成头文件时,出现了"错误: 无法访问android.app.Activity 找不到android.app.Act ...

  3. android WebView套壳 H5微信支付

         看博客,首先得看日期,首先吐槽下,第一次做webview  套壳的android  APP  ,项目有微信支付这一块,就百度搜 看别人的博客,有的说android  webview H5 微 ...

  4. Kotlin 开发Android app(一):Kotlin 建立Android工程

    产品会不断的迭代更新,其实编程语言也是一样的,开发Android 的新语言Kotlin 是简便了很多,我们不需要写太多无用的带来,来实现同样的功能,这来自于Kotlin 语言的特性,Kotlin 有什 ...

  5. ios android app 混编,ios、android移动应用APP原生/混合定制开发

    功能板块 - 注册模块 . 支付模块 . 工具类 . 个人中心 . 互动模块 . 新闻资讯模块 . 广告模块 . 通用模块 . 招聘模块 . 发单抢单 . 地图模块 . 聊天通讯 . 活动模块 . 电 ...

  6. 套壳python_“完全自主设计、开发和实现”的编程语言,被指是Python的套壳产品?...

    最近,关于"完全自主设计.开发和实现"的编程语言,被指是Python语言的套壳产品闹得沸沸扬扬.针对这一网络质疑,在本月的17日,有关项目的负责人表示,中科院的实验员工刘雷,曾经在 ...

  7. android app检测更新版本,《Android APP应该有的东西》之功能篇:版本检测更新

    <Android APP该有的东西>之功能篇:版本检测更新 自从友盟的自动更新下线之后,一大批app选择了自己写更新逻辑.是的,这里的逻辑并不复杂,完全可以自己写,但是不复杂不代表不麻烦, ...

  8. weex android app例子,weex中修改android app图标和欢迎页

    修改欢迎页背景 1.图片放到platforms/android/app/src/main/res/drawable-xxxx下面,图片必须是png格式,否则会报错:然后修改platforms/andr ...

  9. android app权限_如何限制Android App权限

    android app权限 Android forces you to agree to every permission an app wants, assuming you want to use ...

最新文章

  1. loadrunner 配置远程监控windows服务器系统资源
  2. 织梦重置mysql数据库密码忘记_织梦cms管理员密码忘记了怎么重置找回?
  3. 索要 2.3 亿元赎金!富士康遭遇黑客攻击
  4. kaggle实战_4解决高维数据分类/回归问题--房价预测
  5. Android实用笔记——使用ViewFlipper实现屏幕切换动画
  6. TX2开发板Ubuntu16.04安装中文输入法
  7. Pandas安装与对象使用
  8. 统计学理论—假设检验
  9. 淘宝打折骗局--尤其硬盘
  10. google play测试内购流程
  11. 如何制作实时库存报表
  12. 英语英文理论驾考宝典 驾照考试题库软件
  13. cpu的核数和进程_CPU与核心及进程和线程认识
  14. 云数据库 GaussDB(for Influx) 解密第十一期:让智能电网中时序数据处理更高效
  15. mysql修行练级之mysql新手入门常用命令
  16. Yura2020年限量高级定制版阅读进度表
  17. 2022开学第一课,儿童开学安全指南(家长、学校必备)
  18. python打开文件的语法_python27语法Python文件打开方式实例详解【a、a+、r+、w+区别】...
  19. 【Scala】Scala语言基础(IDEA创建项目、基本数据类型、range、键盘输入语句)
  20. 【每日早报】2019/09/06

热门文章

  1. [OpenGL] 视图矩阵(View)矩阵与glm::lookAt函数源码解析
  2. 优雅使用Jsdelivr/CDN加速博客访问速度
  3. 纤维水泥板及配件建筑材料英国UKCA认证—EN 492
  4. 爬虫实战(一)-新版知乎网页分析获取登录url
  5. 性能之颠-应用程序性能技术
  6. 七日之都账号服务器,永远的7日之都开服时间一览表 7日之都最新服务器开服时间一览...
  7. 坐标转换程序:布尔沙七参数计算、投影正反算、坐标换带等
  8. Java 利用ffmpeg工具实现视频MP4转m3u8
  9. 蚁群算法(ACO)最短路径规划(MATLAB)
  10. emlog mysql 设置_EMLOG模板自定义首页