Android 系统已经分化成多种不同的定制版本,制造厂商的不同手机使用的硬件千差万别。差异化带来良好的用户体验的同时,也给开发者带来的适配的问题。于是每个开发团队都需要面临选择测试机列表的问题。我基于如下的考量选取测试机:

  • 系统版本
  • 芯片
  • 屏幕
  • 品牌

数据来源

友盟指数:友盟是国内最大的 app 数据统计平台,从数据统计中可以得知设备的信息,可以较为准确的代表国内数据。

Android Developer Dashboard:Google 从官方的 Google Play Store 访问设备中进行统计,可以较为准确的代表国外的数据。

下面用数据说话。

Android系统版本

这个维度关系到开发者能够使用的 API 和特性,所以首先被关注到:

Umeng-Index

友盟指数:系统版本占比_2015-09-14

Umeng-Index

友盟指数:系统版本占比_2016-04-15

这里需要吐槽一下友盟的新版设计,竟然将 Android 6.0 和 2.x 统一归入了“其他”,使得表意不明。

Android-Developer-Dashboard

Android Developer Dashboard:系统版本占比_2015-09-14

Android-Developer-Dashboard

Android Developer Dashboard:系统版本占比_2016-04-15

可以看出,Android 2.2(API8) 只占据了极少的份额,app 开发可以不考虑了。2.3 的份额也较少,出货日期大约是2010-2011(ref),机器硬件配置较差,加上国产手机市场竞争激烈,已经接近被更换。我们可以看到 4.x 是主流,5.0 是趋势,6.0 开始占据一定份额。

芯片

Android 设备,主流是 ARM 构架,也有部分是 X86 构架。2003年9月发布的 iPhone5s 使用了64位的处理器A7处理器,其后要求 AppStore 上架的 app 需支持64位构架。安卓厂商也迅速赶上,纷纷开始将64位处理器当做未来的方向。程序中使用到 native 库的需要特别关注这个指标,需要 so 库支持对应的构架。

屏幕

屏幕分辨率和比例上,Android 的机器也呈现了分化的趋势。

Umeng-Index

友盟指数:设备分辨率占比_2016-04-15

可以看出1280x720是主流,1920x1080是趋势,800x480还占有相当的份额。

品牌

这里考虑品牌,主要是要考虑定制 ROM,厂商为了自己的利益或者理念,会在原生的 Android 系统上定制不同的外观和特性。品牌知名度众说纷纭,手机厂商号称自己每年卖出的手机,足够国人每人换好几部的。总的来讲,影响力较大的 ROM 有 MIUI、三星 TouchWiz、华为 EMUI 等。
Umeng-Index

友盟指数:设备品牌占比_2016-04-15

结论

基于以上数据和考虑,我最后决定采购的五款测试机和理由如下:

final-selection

最后选择_2016-04-15

选6款,是考虑成本。后期根据统计数据,还会购买新的设备。这篇文章,会考虑半年更新一次,下次更新的时候是2016-09-18!

另外

可以使用 Genymotion 模拟器和 Android Studio 提供的新版模拟器进行一定的补充。

更新2016-01-06:

近日有较多用户反映在 OPPO 的 ColorOS ROM 上出现了较多的崩溃。同时我查阅了友盟的数据,OPPO 是的市场占有率仅次于 VIVO 的第五大手机品牌,不可小视。于是增补了一部性价比较高的 A51 作为测试机。选取测试机,市场占有率排名也很重要。

更新2015-11-29:
华为畅玩 4c 的确是64 bit 的 cpu,但是所使用的 Android 系统是32 bit 的,所以这个机器的运行模式是32 bit,没有达到预期目的。曾经咨询过华为客服,也没能给出个原因和解决方案来。看来64 bit 对其只是一个噱头。

Android 者开发如何选择测试机列表的更多相关文章

  1. Android地图开发之地图的选择

    做lbs开发差不多快2年了,地图相关的产品也差不多做了3个了,用到过的地图包括google地图.高德地图.百度地图.图吧.Osmdroid,今天总结下,方便大家开发时选择合适的地图. 首先说定位模块选 ...

  2. Android项目开发全程(四)-- 将网络返回的json字符串轻松转换成listview列表

    前面几篇博文介绍了从项目搭建到获取网络字符串,对一个项目的前期整体工作进行了详细的介绍,本篇接着上篇介绍一下怎么样优雅将网络返回的json字符串轻松转换成listview列表. 先上图,看一下效果. ...

  3. Android开发调试常用命令列表

    Android开发调试常用命令列表 adb命令 am am start -n com.iflytek.autofly.account/.ui.MainActivity am start -n com. ...

  4. Android应用开发-小巫CSDN博客client之获取评论列表

    Android应用开发-小巫CSDN博客客户端之获取评论列表 上一篇博客介绍了博文具体内容的业务逻辑实现,本篇博客介绍小巫CSDN博客客户端的最后一项功能.获取评论列表,这个功能的实现跟前面获取文章列 ...

  5. Android TV开发总结(七)构建一个TV app中的剧集列表控件

    原文:Android TV开发总结(七)构建一个TV app中的剧集列表控件 版权声明:我已委托"维权骑士"(rightknights.com)为我的文章进行维权行动.转载务必转载 ...

  6. Android N开发 你需要知道的一切

    title: Android N开发 你需要知道的一切 tags: Android N,Android7.0,Android --- 转载请注明出处:http://www.cnblogs.com/yi ...

  7. 使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  8. Android软件安全开发实践(下)

    Android开发是当前最火的话题之一,但很少有人讨论这个领域的安全问题.本系列将分两期,探讨Android开发中常见的安全隐患和解决方案.第一期将从数据存储.网络通信.密码和认证策略这三个角度,带你 ...

  9. 【读书笔记《Android游戏编程之从零开始》】7.Android 游戏开发常用的系统控件(Dialog)

    在Android应用开发中,Dialog(对话框)创建简单且易于管理因而经常用到,对话框默认样式类似创建样式的Activity.首先介绍android.app.AlertDialog下的Builder ...

随机推荐

  1. Linux系统文件权限&目录权限

    linux系统一切都是文件,文件和目录的所属与权限--来分别规定所有者.所有组.其余人的读.写.执行权限. 读(read),写(write),执行(excute)简写为(r.w.x),也可以以用(4. ...

  2. Error LNK2019: unresolved external symbol "char * __stdcall _com_util::ConvertBSTRToString(wchar_t *)"

    Error 2 error LNK2019: unresolved external symbol "char * __stdcall _com_util::ConvertBSTRToStr ...

  3. Spring boot 整合jsp和tiles模板

    首先贴上我的pox.xml文件,有详细的支持注释说明 <?xml version="1.0" encoding="UTF-8"?> <proj ...

  4. HDU 4643 GSM 算术几何

    当火车处在换基站的临界点时,它到某两基站的距离相等.因此换基站的位置一定在某两个基站的中垂线上, 我们预处理出任意两基站之间的中垂线,对于每次询问,求询问线段与所有中垂线的交点. 检验这些交点是否满足 ...

  5. HDU 4620 Fruit Ninja Extreme 搜索

    搜索+最优性剪枝. DFS的下一层起点应为当前选择的 i 的下一个,即DFS(i + 1)而不是DFS( cur + 1 ),cur+1代表当前起点的下一个.没想清楚,TLE到死…… #include ...

  6. code manager tools svn服务安装配置

    svn server 安装配置: 下载地址:http://www.visualsvn.com/server/download/ 然后安装图一步一步前进: 1.点击download now: 2.点击N ...

  7. wust 1061 链表的合并

    怒刷存在感! ~从此wustoj踏上ty博客这样高端霸气上档次的地方啊啦啦~ 只是顺便看了下保研复试题,原来觉得链表好讨厌,现在数据结构学的没办法了,写了个大概是标准的链表合并的写法吧... #inc ...

  8. 关于Linux系统调用,内核函数【转】

    转自:http://blog.csdn.net/ubuntulover/article/details/5988220 早上听人说到某个程序的一部分是内核态,另一部分是用户态,需要怎么怎么.当时突然想 ...

  9. python 中的集合(set) 详解

    在Python set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种. 创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方 ...

  10. SQL Server Object Explorer in VS

    菜单栏View-->SQL Server Object Explorer 默认有几个连接,可以根据需要自己再另外添加 比如添加127.0.0.1 建立连接之后,剩下的操作和sql server中 ...