Amazon的Fire Phone之于Android开发者

在上周Amazon也耐不住加入了手机竞争行列之中,发布了自己的Fire Phone,于是Android家族又多了一位变种成员,Android系统的碎片化程度也进一步加剧。因为工作的关系,我有幸在上个月就得到了一部工程机为其做提前开发,不过因为政策原因所以到现在才能来谈谈对这部新手机的看法。

对于Fire Phone的功能以及外观,官方网站和各家技术网站都有了详尽的介绍和报道,再者因为我拿到的是工程机,无法体现到完备的功能展现,因此本篇文章谈的主要是Fire Phone对于开发者而言所要面对的问题和状况。

Android的心,iPhone的型

和其他所有厂商自定义的Android Phone一样,Fire Phone也做出独有的特点来区别出自己,不然用户也就没有理由要购买一部同质的设别。首先在按键上讲,自3.0以后Android传统上无论是实体的还是虚拟的都保有3个按键:返回键(返回上一层页面)、主屏键(返回手机主屏)、任务键(查看最近使用任务列表)。而Fire Phone去除了返回键和任务键,只留下了主屏键,看起来就像是一台更大屏幕的iPhone。

这对于很多开发者来说是比较值得考虑的问题。因为有时候我们可能会假设所有Android设备都有返回键,因此在界面设计时,为了美观性和适用性等因素考略,而没有在界面上加上返回按钮。所以如果该程序放在Amazon的App Store上,用户可能就会被困在没有返回按钮的界面中。

不过后来我们被Amazon的人员告知,其实设备是有返回按钮的,只是并非实体按键,而是要从设备下方往上滑实现返回。如同从设备上方往下滑可查看系统消息一样。这对于新用户来说根本无从知晓,而只会责怪应用程序没有提供返回功能致使他们困在某个界面下。

另一方面Fire Phone没有任务键(可能它又是用什么手势打开,但是目前我依然没有发现),也就是说用户无法在最近使用的任务栏里手动的将应用程序关闭。所以下次开启依然是进入那个无法返回的界面,于是用户可能就会厌烦这个程序而将其彻底删除。

浏览Fire APIs

一款移动设备的成功,很大原因在于它建立起来的生态环境:移动操作系统的拥有者不断优化系统的功能和性能,并提供便捷的开发套件给开发者生产相应的应用程序,进而吸引用户使用该设备,然后根据用户的消费和需求再进一步提升和完善。

Amazon的Fire Phone也是希望打造这样的生态环境,下图的表中就是Fire Phone所提供的开发接口,让开发者可以使用到Fire Phone与其他Android设备不同的的特性和功能。但是对于这些API,在使用中真的对其表示无奈和叹息:怎么能这么糟糕。

开发者可以在其网站上下载到这些API的文档与相关的列子。浏览API,可以发现其设计的接口大部分的参数和返回值都是intString这样的基础数据或者已定义的Enum成员,而不是Android常用的IntentBundle这些Parcel类型的数据。这样的好处在于API非常容易理解的使用;坏处在于几乎完全无法自定义功能和界面,只能遵循其给出的类型中做出选择和使用。

比如其中的Home API,它是对应开发Fire Phone上的被其称为HeroWidget的控件。之前说了Fire Phone没有找到程序最近使用列表,另外它也没有传统Android设备的桌面,取而代之的是HeroWidget。应用程序按最近使用从左往右按carousel排列,每一个显示项目上程序的图标先占了大半个屏幕,剩下的一半留着呈现一些应用内容。如果没有对齐进行自定义开发,Amazon就会无耻的在上边做自己的App广告。

虽然本质上它应该就是Android的AppWidget,但呈现的方式只有Grid和List的两种,List下也是定义好的4种样式,完全无法自己定义,就连字体的颜色、大小都不能改变,还只能呈现大概20-30个英文字。完完全全就是为了Amazon卖东西用来展示商品的。

在原始的AppWidget里,可以通过PendingIntent来启动Activity、Service、BroadcastReceiver,Intent中可以存Action、Category、Data、Extra等等信息。但是HeroWidget只能构建HeroWidgetIntent或者HeroWidgetActivityStarterIntent来启动Service或者Activity,并且只能存放最长2048 bytes的String做为Extra数据。真是感觉又回到80年代,对于每个内存都要小心谨慎使用的日子。

其实Amazon的这个HeroWidget是非常好的设计,因为应用程序如同开店,也很注重回头率。而怎么让用户回头,每个开发者都在心力交瘁的思考,或者广告推广,或者邮件推送,或是系统消息召唤。Widget也是一种非常好的呈现新鲜事的途径可以让用户点击回到程序中。但是Amazon的样式限制则会导致程序间在其上呈现的差异太小,字数限制又导致一言难尽吸引力不足,存储数据的限制也导致开发时对字符串自行做额外的分析处理。一个好东西就砸在Amazon手上吧,也许Amazon本来主要就是想自己用,开放给开发者已经很客气了。

对于其他的API也有或多或少类似的问题,如果想为Fire Phone提供相应的支持,就要忍受Amazon的限制。但是对于很多功能对于绝大多数应用来说都是可无的功能。比如3D效果个人觉得只对游戏可能比较有意义,但是游戏开发大多都有自己的3D引擎基本不需要Amazon的伪3D;Motion Gestures和Head Tracking恐怕也只会跟Samsung眼球控制一样只是一个炫酷的功能,而非实用和常用的功能。想想看倾斜翻页确实很酷,但是真的用起来肯定还是比如手指翻页精准呢。

了解Amazon的Android SDK

不同于以往的Amazon发布的Kindle,这次发布的Fire Phone还提供了自己的略有不同的Android SDK。Fire Phone所实用的移动操作系统是基于Android 4.2.2,API Level 17深度定制的系统,所谓深度定制就是加上了上边的所提到的那个功能以及跟Amazon的一些服务进行绑定等等。一般发布到Google Play的应用程序只要支持Level 17就可以安装在Fire Phone上使用,得到Amazon的审批也能发布到其App Store上供更多用户下载安装。

但是要想使用之前提到的那些特别的API来支持Fire Phone特有的功能和特性,就必须使用Amazon提供的SDK来编译和发布了。Amazon上有提供文档教开发者如何安装Add-on,如何修改IED和配置文件来达到所需的编译要求。(如果没有Fire Phone实体机器做开发,Amazon也提供了一些Library和Apk来让普通的设备和模拟器变得可以支持HeroWidget展示,对于其他功能就必须要在实体机器上测试才是最好的。)

这一切都不难,问题在于它使Android 4.2.2,而最新的Android版本已经到了Android 4.4.2,API Level 19。有时候开发Android程序的时候会想用最新的功能但又要向后兼容,所以常常会用到Build.VERSION_CODES。在我们的程序中就用到了 Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT的比较来支持KitKat版本的功能。结果换到Amazon的SDK,因为是4.2.2所以在Build.VERSION_CODES下没有KITKAT的定义,所以全部变成Error。因此为了支持Amazon的新特性同时维护当前Android最新版本就免不了做相当大得改变,对于将来的长期维护投入也非常大。这也是Android碎片化所带来巨大的代价。

只能怪Amazon的定制太深入了,如果只是新增一些库,而不是需要用完全不同的SDK进行编译可能对开发者带来的麻烦就会小一些。但另一方面说来,要想在Android上做出差异来,这些就是难以避免的吧。

是否为Fire Phone做开发,这是个问题

Fire Phone现在刚刚出来,对于市场和用户是如何反应还没有结果。对于开发者而言是否要为其做开发也是很大的问题,因为如果能早一步进入受用户喜欢的市场,就能比其他人有一定的优势。如果iOS最早期的开发者都会觉得当时获得用户可要比现在简单多了。但是如果市场不接受这个设备,过早的投入其中也只是浪费时间和精力,比如Windows Phone。

我之前都在为iOS做开发,后来转到了Android,虽然对Java总保有缺憾感,但是Java和Android的开发性和代码的开源性是我非常喜爱的。对于开发中不明白的地方和API使用问题不在需要去猜测和试验,可以直接通过阅读源码来找到答案,也可以通过了解源码来熟悉整个系统代码规范和编码风格,这是非常有助于程序员成长的方式。但是Amazon的SDK并不是开放的,无法看到其源代码,因此对于API的解读只能从文档和实验中获取,这也让我非常不情愿对Fire Phone进行开发。

每个人都会对Fire Phone有不同的评价和期望,有人觉得会卖得好,有人觉得卖得贵,有人觉得卖不出去,但是真得怎么样也只有等到更多人真正体验之后才能知道。如同iPad以及iPad Mini刚出来的时候都觉得不会有好的市场结果后来证明这些尺寸却正是用户所需要的。也许Fire Phone的4个额外的摄像头的动作捕捉技术也会引领一个潮流也说不定。如果说以前使用触控笔是一种单点技术,那么使用手势就是二维技术,那么该是时候进入动作捕捉这样的设备三维技术了。

欢迎到我的新博客地址阅读本文

Amazon的Fire Phone之于Android开发者

时间: 2024-11-04 02:56:49

Amazon的Fire Phone之于Android开发者的相关文章

对Android开发者有益的40条优化建议

下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow解决问题 对每个你像添加的特征重复上述过程.这种方法能够激励你,因为你在保持不断迭代,不经意中你学到了很多.然而,当你发布应用时你还要做一些更深入的事情. 从一些可正常工作的代码到一个可怕的应用程序是一个巨大的跳跃,相比iOS平台Android更是如此 .当在iOS上发布应用时只是在一个设备上跳跃–你的手机–对很多设备而言都很相似–同样大小的屏幕,都有很好

对 Android 开发者有益的 40 条优化建议

英文原文:40 Developer Tips for Android Optimization 下面是开始Android编程的好方法: 找一些与你想做事情类似的代码 调整它,尝试让它做你像做的事情 经历问题 使用StackOverflow,Google,百度(虽然本人不是很认可百度,不过确实是国内用百度的确能够解决很多问题了)解决问题 对每个你像添加的特征重复上述过程.这种方法能够激励你,因为你在保持不断迭代,不经意中你学到了很多.然而,当你发布应用时你还要做一些更深入的事情. 从一些可正常工作

给 Android 开发者的 RxJava 详解

作者:扔物线 前言 我从去年开始使用 RxJava ,到现在一年多了.今年加入了 Flipboard 后,看到 Flipboard 的 Android 项目也在使用 RxJava ,并且使用的场景越来越多 .而最近这几个月,我也发现国内越来越多的人开始提及 RxJava .有人说『RxJava 真是太好用了』,有人说『RxJava 真是太难用了』,另外更多的人表示:我真的百度了也谷歌了,但我还是想问: RxJava 到底是什么? 鉴于 RxJava 目前这种既火爆又神秘的现状,而我又在一年的使用

一名Android开发者的微信小程序填坑之路(1)

前言 首先要声明的是,我是一名 Android 开发者,之前基本没有前端开发经验,甚至连 JS ,HTML 都是为了开发小程序现学的一些皮毛--所以文章中所提到的一些点也许在资深前端开发者看来只是小case,但是站在一个 Android 开发者的角度来看确实是大坑. 前面就不说太多东西了,文章的末尾再谈谈我对小程序的一些看法--这篇文章主要是谈谈在开发小程序的过程中遇到的一些坑. PS:推荐一下我写的一个微信小程序版的Gank客户端:wechat-weapp-gank 正文 1,获取小程序开发工

一名Android开发者的微信小程序填坑之路(2)

前言 上一篇是九月二十七日写的,而这一篇我动笔的时间是十月十日(特殊的日子),中间相隔十三天--当然是因为国庆节.说老实话,这十三天里面我都没有碰和小程序有关的东西--毕竟学习小程序的开发也只是起于兴趣,而平时的工作并不会涉及与其相关的东西--但是在这十三天里,我能明显的感受到小程序热正在逐渐的消退,或者说大家正在逐渐以一种较为平和的姿态接受它的存在,其实这是一件好事.期待公测的到来. 接下来我就直接进入正题了,另外,文末我想和大家分享一下我的国庆节. PS:这篇文章是接着上一篇文章 一名And

为Android开发者定制的搜索引擎

我在谷歌上定制了一个专门针对Android开发者的搜索引擎,加载慢的童鞋考虑FanQiang吧,作为技术人员使用Google才是王道. 在此推荐给大家:Android搜索引擎 搜索内容:Android方面的问答.技术文章.API.开源项目等. 搜索范围:StackOverflow.Github.Google Code.Eoe.开源中国.CSDN.博客园.Android巴士.搜集的各种Android开源小站等. 效果图:

Android开发者必备的42个链接

http://mobile.51cto.com/ahot-426035.htm 下面收集了42个帮助大家学习Android的内容链接,部分内容是面向初学者的,帮助大家从头开始学习Android开发,其他则面向较高级的开发者.希望推荐的这些内容对你有帮助. 官方网站 1.谷歌Android开发者页面 这里是主站点,在这您可以找到一切资源帮助您开始Android开发.此站包含了很多关于学习基础知识的资源,完整的API引用,以及你开始开发所需的各种工具.此站共分为五个部分: 作为初学者,你应该从工具开

30多个Android 开发者工具 带你开发带你飞

文中部分工具是收费的,但是绝大多数都是免费的. FlowUp 这是一个帮助你跟踪app整体性能的工具,深入分析关键的性能数据如FPS, 内存, CPU, 磁盘, 等等.FlowUp根据用户数量收费. Stetho 由Facebook开发的一个强大的开源Android debug平台,Stetho让原生 Android app的debug跟使用Chrome的开发者工具debug web页面一样简单.它能让你轻松检查整个view树结构,观察SQLite数据库,管理网络操作以及其它的一些操作. JRe

Android开发者必备的14个工具资源

此前,小编多次为大家带来有益于开发者的.本文,再次给大家带来各款工具及学习资源. 1.Free Android Developer Ebook: andbook!  这是一款免费的电子书,为Android开发者提供入门级编程指南. 2.Free Android Developer Ebook: Professional Android Application Development 这是一本提供移动应用程序实例的用户手册,帮助开发者快速开发安卓应用. 3.Android Emulator fro