android app套壳马甲开发,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,否则中文会出现乱码。
作者:苌蓊芪
链接:https://www.jianshu.com/p/29cb209197bf
android app套壳马甲开发,Android应用开发最佳实践:马甲包配置管理相关推荐
- android app套壳马甲开发,【不二之选】国内Android马甲包套壳上架源头
国内Android马甲包套壳上架源头例如,在覆盖总量变化的几个区间中,仅进入分类榜的App关键词覆盖数降低.不变.少量增加(1~10)的比例更多:而总榜App关键词覆盖总量增加超过10以上的App比例 ...
- 命令行下使用javah命令生成.h文件,出现“错误: 无法访问android.app.Activity 找不到android.app.Activity的类文件”的解决方法...
在学习NDK中,当我在项目的bin/classes目录下使用javah命令生成头文件时,出现了"错误: 无法访问android.app.Activity 找不到android.app.Act ...
- android WebView套壳 H5微信支付
看博客,首先得看日期,首先吐槽下,第一次做webview 套壳的android APP ,项目有微信支付这一块,就百度搜 看别人的博客,有的说android webview H5 微 ...
- Kotlin 开发Android app(一):Kotlin 建立Android工程
产品会不断的迭代更新,其实编程语言也是一样的,开发Android 的新语言Kotlin 是简便了很多,我们不需要写太多无用的带来,来实现同样的功能,这来自于Kotlin 语言的特性,Kotlin 有什 ...
- ios android app 混编,ios、android移动应用APP原生/混合定制开发
功能板块 - 注册模块 . 支付模块 . 工具类 . 个人中心 . 互动模块 . 新闻资讯模块 . 广告模块 . 通用模块 . 招聘模块 . 发单抢单 . 地图模块 . 聊天通讯 . 活动模块 . 电 ...
- 套壳python_“完全自主设计、开发和实现”的编程语言,被指是Python的套壳产品?...
最近,关于"完全自主设计.开发和实现"的编程语言,被指是Python语言的套壳产品闹得沸沸扬扬.针对这一网络质疑,在本月的17日,有关项目的负责人表示,中科院的实验员工刘雷,曾经在 ...
- android app检测更新版本,《Android APP应该有的东西》之功能篇:版本检测更新
<Android APP该有的东西>之功能篇:版本检测更新 自从友盟的自动更新下线之后,一大批app选择了自己写更新逻辑.是的,这里的逻辑并不复杂,完全可以自己写,但是不复杂不代表不麻烦, ...
- weex android app例子,weex中修改android app图标和欢迎页
修改欢迎页背景 1.图片放到platforms/android/app/src/main/res/drawable-xxxx下面,图片必须是png格式,否则会报错:然后修改platforms/andr ...
- android app权限_如何限制Android App权限
android app权限 Android forces you to agree to every permission an app wants, assuming you want to use ...
最新文章
- loadrunner 配置远程监控windows服务器系统资源
- 织梦重置mysql数据库密码忘记_织梦cms管理员密码忘记了怎么重置找回?
- 索要 2.3 亿元赎金!富士康遭遇黑客攻击
- kaggle实战_4解决高维数据分类/回归问题--房价预测
- Android实用笔记——使用ViewFlipper实现屏幕切换动画
- TX2开发板Ubuntu16.04安装中文输入法
- Pandas安装与对象使用
- 统计学理论—假设检验
- 淘宝打折骗局--尤其硬盘
- google play测试内购流程
- 如何制作实时库存报表
- 英语英文理论驾考宝典 驾照考试题库软件
- cpu的核数和进程_CPU与核心及进程和线程认识
- 云数据库 GaussDB(for Influx) 解密第十一期:让智能电网中时序数据处理更高效
- mysql修行练级之mysql新手入门常用命令
- Yura2020年限量高级定制版阅读进度表
- 2022开学第一课,儿童开学安全指南(家长、学校必备)
- python打开文件的语法_python27语法Python文件打开方式实例详解【a、a+、r+、w+区别】...
- 【Scala】Scala语言基础(IDEA创建项目、基本数据类型、range、键盘输入语句)
- 【每日早报】2019/09/06
热门文章
- [OpenGL] 视图矩阵(View)矩阵与glm::lookAt函数源码解析
- 优雅使用Jsdelivr/CDN加速博客访问速度
- 纤维水泥板及配件建筑材料英国UKCA认证—EN 492
- 爬虫实战(一)-新版知乎网页分析获取登录url
- 性能之颠-应用程序性能技术
- 七日之都账号服务器,永远的7日之都开服时间一览表 7日之都最新服务器开服时间一览...
- 坐标转换程序:布尔沙七参数计算、投影正反算、坐标换带等
- Java 利用ffmpeg工具实现视频MP4转m3u8
- 蚁群算法(ACO)最短路径规划(MATLAB)
- emlog mysql 设置_EMLOG模板自定义首页