文档章节

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

 腾讯优测
发布于 2016/01/07 17:27
字数 1353
阅读 8
收藏 0

文/腾讯优测 章婉霞


除了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小时在线运行,覆盖亿级用户。

© 著作权归作者所有

粉丝 0
博文 2
码字总数 1999
作品 0
大连
私信 提问
2014 年 Android 碎片化报告

开源对于 Google 的 Android 来说是一把双刃剑。一方面它带动了 Android 的繁荣,在市场份额及使用量方面逐步压倒了苹果的 iOS。另一方面,允许任何人使用和修改又导致了严重的碎片化,令 Go...

oschina
2014/08/26
3.8K
21
Google 修改 Android SDK 协议以应对平台的碎片化

认识到Android平台的碎片化使用户和开发人员都感到沮丧,Google正在想办法制止它。该公司已经修改了它的法律协议,明文禁止在Android上的应用程序开发工作,不得采取有助于使移动平台进一步碎...

oschina
2012/11/16
3.4K
19
Android 碎片化没有伤害到它的普及

苹果iOS生态系统基本不存在碎片化问题,根据苹果开发者官网公开的信息:93%的用户运行iOS6,6%的用户运行iOS 5,剩余1%的用户使用更早的版本。相比之下,Google Android存在明显的碎片化:3...

oschina
2013/06/23
1K
16
Android 碎片化愈演愈烈,最终会失控吗?

来自IDG的一则市场预测数据,2015年全球Android系统OEM厂商的手机出货量将达到11.6亿台,而这个数字在2019年将增长到15.4亿台。 市场机制的调控下,安卓已经成为了众多OEM厂商屡试不爽的品牌...

王练
2016/10/07
4.2K
11
Android棒棒糖占有率已达18.1%,碎片化依然严重

今天,谷歌公布了一份最新的各版本Android系统市场占有率报告。数据显示,Android Lollipop(5.0和5.1)表现非常不错,占有率已经达到18.1%。然而,整体来说安卓系统的碎片化问题依然非常严重...

oschina
2015/08/04
3.8K
28

没有更多内容

加载失败,请刷新页面

加载更多

HBase新建表报错 org.apache.hadoop.hbase.TableExistsException

之前安装了旧版本的hbase, 没有清理其在Zookeeper上的内容。 解决办法 stop-hbase.sh zkCli.sh >>> rmr /hbase >>> quit start-hbase.sh...

dreamness
11分钟前
0
0
大数据技术的应用现状与展望

本文是我即将由嵌入式底层驱动行业转入大数据研究领域的综述文章,案例摘自《程序员》电子期刊,由于初学者知识面较窄,查看文献量较少,因此后续还会在此基础上,继续跟踪并深入研究,为论文...

陈小君
17分钟前
0
0
NCRE考试感想 三级信息安全(上)

时间节点 报名时间:2017-06 考试时间:2017-09 查询成绩:2017-11   考试简述 满分100分,时间120分钟。题型有三种,选择题、综合题、应用题。   备考经验 题库是WLJY的,买了激活码。为了...

志成就
24分钟前
0
0
百度地图显示我的位置

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title></title><script type="text/javascript" src="jquery-1.8.2.min.js"></script></head><body><sec......

塔塔米
29分钟前
0
0
mysql mysql常用的常用函数

1. 数学函数 函 数 作 用 ABS(x) 返回x的绝对值 CEIL(x),CEILIN(x) 返回不小于x的最小整数值 FLOOR(x) 返回不大于x的最大整数值 RAND() 返回0~1的随机数 RAND(x) 返回0~1的随机数,x值相同返...

edison_kwok
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部