2019独角兽企业重金招聘Python工程师标准>>>

文/腾讯优测 章婉霞

除了crash问题,Android平台的碎片化越来越受到移动开发的关注,且不谈支持Android系统的移动设备早已过万款,屏幕、品牌以及传感器等方面的碎片化问题也困扰着开发者。

初级Android的开发人员经常关心的问题就是开发的应用能不能在需求的设备上正常运行。为什么我没有说所有设备呢?长期盘踞各Android设备市场份额或市场关注度榜单前十位,被大家熟知的品牌,它们ROM的个性化都足以让人眼花缭乱了,更何况在如今“乱世”里那些七零八落的机型了。想要做更全面的自动化机型测试,破解兼容问题,腾讯优测是很好的选择。

最近笔者在做Launcher上图标的清理,接到这个需求的时候,内心是感到轻松的,感觉查询需要删除的图标然后删除不就OK了。但事实证明,我还真是很年轻呢。

Launcher个性化

我们都知道,Android源码中有Google做的原生Launcher。在2.1及之前的版本中,使用com.android.launcher;2.2至4.3版本使用的是com.android.launcher2;4.4版本开始则使用com.android.launcher3。

为了探究一下不同机型的Launcher应用,我分别查看了五部手机,结果如下:

除了锤子使用了原生的Launcher外,其他四个机型都经过了个性化再开发。在实际操作中也可以发现,对图标上的操作响应也不尽相同。

对于点击Home键后有“应用”图标的Launcher,长按应用并拖动可在桌面上创建快捷方式。而没有“应用”图标的Launcher,长按加拖动则只能实现应用图标的移动。

应用要创建和删除自己的快捷方式图标只需发送如下两个Intent即可:

com.android.launcher.action.INSTALL_SHORTCUT

com.android.launcher.action.UNINSTALL_SHORTCUT

同时需要在AndroidManifest.xml中添加如下两个权限:

android:name="com.android.launcher.permission.INSTALL_SHORTCUT

android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT

而第三方应用要对Launcher上其他应用的快捷方式图标进行删除,最简单粗暴的方式是直接从数据库里删除,当然我们并不推荐,即便发送删除的Intent也需要获知该图标在Launcher保存信息的数据库launcher.db中的一条具有独特性的信息。

接下来我们看看launcher.db数据库是不是像网络上说的那般,favorites表中保存着图标信息。

数据库个性化

从导出launcher.db来看,上述表中的五部手机大部分都在favorites表中保存图标信息,三星I9082则在favorites中只保存主桌面图标,其他应用图标保存在favorites_normal表中。而各机型launcher.db中存放的数据及形式也有所区别,详细情况见如下两图:

权限个性化

一旦要对Launcher数据库有访问,至少需要有对数据库的读权限,而要进行操作,权限要求会更高(写数据库的权限安全等级一般都是signatureOrSystem)。据不完全统计,要适配市场上大部分的设备,如下所列出的一大长串权限是免不了的,而且肯定还有不少漏网之鱼。

android:name="com.android.launcher.permission.READ_SETTINGS"

android:name="com.android.launcher.permission.WRITE_SETTINGS"

android:name="com.android.launcher2.permission.READ_SETTINGS"

android:name="com.android.launcher2.permission.WRITE_SETTINGS"

android:name="com.android.launcher3.permission.READ_SETTINGS"

android:name="com.android.launcher3.permission.WRITE_SETTINGS"

android:name="cn.nubia.launcher.permission.READ_SETTINGS"

android:name="cn.nubia.launcher.permission.WRITE_SETTINGS"

android:name="org.adw.launcher.permission.READ_SETTINGS"

android:name="org.adw.launcher.permission.WRITE_SETTINGS"

android:name="com.htc.launcher.permission.READ_SETTINGS"

android:name="com.htc.launcher.permission.WRITE_SETTINGS"

android:name="com.qihoo360.launcher.permission.READ_SETTINGS"

android:name="com.qihoo360.launcher.permission.WRITE_SETTINGS"

android:name="com.lge.launcher.permission.READ_SETTINGS"

android:name="com.lge.launcher.permission.WRITE_SETTINGS"

android:name="net.qihoo.launcher.permission.READ_SETTINGS"

android:name="net.qihoo.launcher.permission.WRITE_SETTINGS"

android:name="org.adwfreak.launcher.permission.READ_SETTINGS"

android:name="org.adwfreak.launcher.permission.WRITE_SETTINGS"

android:name="org.adw.launcher_donut.permission.READ_SETTINGS"

android:name="org.adw.launcher_donut.permission.WRITE_SETTINGS"

android:name="com.huawei.launcher3.permission.READ_SETTINGS"

android:name="com.huawei.launcher3.permission.WRITE_SETTINGS"

android:name="com.fede.launcher.permission.READ_SETTINGS"

android:name="com.fede.launcher.permission.WRITE_SETTINGS"

android:name="com.sec.android.app.twlauncher.settings.READ_SETTINGS"

android:name="com.sec.android.app.twlauncher.settings.WRITE_SETTINGS"

android:name="com.anddoes.launcher.permission.READ_SETTINGS"

android:name="com.anddoes.launcher.permission.WRITE_SETTINGS"

android:name="com.tencent.qqlauncher.permission.READ_SETTINGS"

android:name="com.tencent.qqlauncher.permission.WRITE_SETTINGS"

android:name="com.huawei.launcher2.permission.READ_SETTINGS"

android:name="com.huawei.launcher2.permission.WRITE_SETTINGS"

android:name="com.android.mylauncher.permission.READ_SETTINGS"

android:name="com.android.mylauncher.permission.WRITE_SETTINGS"

android:name="com.ebproductions.android.launcher.permission.READ_SETTINGS"

android:name="com.ebproductions.android.launcher.permission.WRITE_SETTINGS"

android:name="com.oppo.launcher.permission.READ_SETTINGS"

android:name="com.oppo.launcher.permission.WRITE_SETTINGS"

android:name="com.huawei.android.launcher.permission.READ_SETTINGS"

android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS"

android:name="telecom.mdesk.permission.READ_SETTINGS"

android:name="telecom.mdesk.permission.WRITE_SETTINGS"

仅一个Launcher就这么任性,千千万万的Android开发人员,多少次问自己:

爱卓,我怕了吗?

眼泪,我忘了吗?

产品催,机型差

应用怎么开发???

不管是创业公司还是具备一定规模的企业,为了开发和测试自己的应用,采购覆盖Android市场80%甚至更高的机型,是一件既不现实也不容易更不合理的事。想要为开发者压缩时间成本,为公司节省采购和管理成本,不妨尝试一下腾讯优测,会让你得到意想不到的效果哦,这可是程序员MM发自内心地呐喊~

想了解更多干货,欢迎关注腾讯优测微信号:优测网(wxutest)

腾讯优测:

腾讯优测是备受客户信赖的移动云测试平台,为应用、游戏,H5混合应用的研发团队提供产品质量检测与问题解决服务。不仅在线上平台提供「云手机远程操控与调试」、「自动化全面兼容性测试」、「APK源码级缺陷性分析」等多种质量检测工具,更为VIP客户配备专家团队提供定制化综合测试解决方案。真机实验室配备上千款手机,覆盖市面98%主流机型,7*24小时在线运行,覆盖亿级用户。

转载于:https://my.oschina.net/u/2420477/blog/599030

程序员MM的自白:磨人小妖精之安卓碎片化相关推荐

  1. 程序媛的自白:磨人小妖精之Android碎片化

    作者简介:章婉霞,腾讯优测高级Android工程师 除了Crash问题,Android平台的碎片化越来越受到移动开发的关注,且不谈支持Android系统的移动设备早已过万款,屏幕.品牌以及传感器等方面 ...

  2. 蜜糖?砒霜? 区块链真skr磨人小妖精!

    哪里有天才,我是把别人喝咖啡的工夫都用在工作上的.──鲁迅  中国软件网每日精选文集 "大家都在讨论区块链, 但我还是搞不懂它是什么, 和我又有什么关系." 今天各位"吃 ...

  3. 程序员是一群什么人?

    说起对程序员的印象,一般来自两个地方:影视作品和段子手.前者宣传的程序员很酷很帅,活着就是为了改变世界的一群人.后者揭露的程序员往往是很挫很苦逼,就屌丝历险记. 电影:<黑客帝国>三部曲: ...

  4. 微信小程序从0到上线,程序员一个月开发一款小程序实录

    前言:本人从事游戏开发多年,是一名饱受折磨的游戏前端开发人员.游戏这个行业越来越难做,加班越来越严重.正值行业转变之际,听闻微信小程序热火之时,我想偿试一下小程序制作,因此,一个月之后有了这篇文章:微 ...

  5. 小程序获取头像试试水 02《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

    本系列教程是针对粉丝的变现教程,还不是粉丝的可以关注我并且到社区:https://bbs.csdn.net/topics/603436232 进行打卡,不是老粉的也可以获取最终的技术变现学习,最终还有 ...

  6. 小程序的 HelloWord 01《 程序员变现指南之 微信QQ 小程序 真的零基础开发宝典》

    本系列教程是针对粉丝的变现教程,还不是粉丝的可以关注我并且到社区:https://bbs.csdn.net/topics/603436232 进行打卡,不是老粉的也可以获取最终的技术变现学习,最终还有 ...

  7. python“-o”命令更改存储位置_程序员的狂欢地一般人的超大存储免费空间和网站空间你要会用用...

    程序员的狂欢地一般人的超大存储免费空间和网站空间你知道是什么么?怎么用么? 程序员的狂欢地一般人的超大存储免费空间和网站空间是GitHub. 什么是GitHub? GitHub是用于版本控制和协作的代 ...

  8. 程序员MM的征婚启事

    一个女程序员MM的征婚启事 SELECT * FROM 男人们 WHERE (未婚=true or 离异=true) and 同性恋=false and 穷光蛋=false and 有房=true a ...

  9. Tensflow版本升级就是磨人的妖精——regular能用吗?

    磨人的妖精,版本带来的伤筋动骨,有发展就有版本升级,自己模块有方法变化.不同模块之间还有相互依赖变化,coding中有1/3的时间都是在解决版本升级后新特性学习问题解决,1/3是在debug,真正写核 ...

最新文章

  1. (chap4 IP协议) IP基础知识
  2. 手动调用cx-table.focus和a.focus方法的效果比较
  3. 计算机鼠标显示停顿原因,经常遇到鼠标指针停顿卡的解决方法
  4. 关于CSDN登录没有微信二维码的问题
  5. YYKit 源码探究
  6. Java实现Excel数据导入数据库
  7. Dos 模拟器 DosBox 下载使用
  8. c51单片机小车c语言,用51单片机编写的智能小车全程前进的C程序
  9. 08.ThreeJs开发指南-第八章-加载外部模型
  10. 云计算行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  11. u-boot与linux下网卡MAC地址的更改
  12. Python3学习笔记十三
  13. 多台计算机虚拟化方案,虚拟化建设解决方案
  14. 什么是裸金属云服务器,适用于哪些场景,又有哪些优势?
  15. 【求助】如何在移动固态硬盘上装一个完美的移动系统
  16. PTA换硬币【满分】
  17. Android已root设备定时重启
  18. 智学.com查成绩 html,智学.com查分数
  19. 【每日新闻】新“实体名单”剑指中国超算 美国动机不简单
  20. bitmap灵活存储思维

热门文章

  1. php五只猴子分椰子_tubes五只雪茄_phillies雪茄五只装
  2. Java的注释(详细版)
  3. 微信小程序在showToast中换行并且隐藏icon
  4. Swift3实现的绘制股票K线库, FastImageCache提升图片的加载和渲染速度,Chameleon颜色框架
  5. DOS、Mac 和 Unix 文件格式+ UltraEdit使用
  6. Linux环境搭建 | 手把手教你安装Linux虚拟机
  7. Spring Boot 教程(三): Spring Boot 整合Mybatis
  8. 算法 - 时间复杂度
  9. 3-openstack之keystone上
  10. 《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一3.7.5 使用StAX写出XML文档