存档:

‘技巧’ 分类的存档

关于 Bootloader 你所应该了解的

2011年6月15日

感谢 Twitter@ss1271 的投递和翻译。

我们对于能够及时阻止HTC对其Android设备的Bootloader加锁一事很happy,也对制造商能够聆听少数用户的声音,并意识到解锁 Bootloader可以提升其产品价值的做法感到非常高兴。我们将持续追踪这件事的进展和效果。同时,我们也收到很多关于这Bootloader为啥引 起这么大聒噪之类的疑问,于是就有了这篇试图解答这个问题的文章,此文试图用不Geek的方式来解答,来壶茶,且品且读吧~

谁会关心Bootloader啊、hboots啊刷机啊神马的?

很少的一些人,不过这得看你从神马角度来看这个问题了。现在有40万部/天的Android设备被激活,这些人中的大部分都对(或者压根不关 心)Bootloader是神马毫无概念。这些人可能是个妹纸正在做头发的时候给人发短信;或者是个爷们儿正拿着购物单买螺栓;或者是个得瑟的哥们正在星 巴巴拿着EVO 4G装13。Android现在是主流手机,而你,正在慢慢阅读这篇文章,就说明你比其他一些Android用户更高级更牛13。

正因为关心Bootloader的人非常的小众,所以诸如HTC啊、Moto啊神马的厂商 才敢于动锁Bootloader的心思。但是也有公司敢于跳出这个锁Bootloader的俱乐部,比如Sony Ericsson和HTC实际上改变了他们原来的策略,即使对于少数要求解锁Bootloader的呼声(Moto你听见了么),他们也正视了这个问题, 正准备提供一个开放的Bootloader,来迎合所有的消费者。

对于那些非常在意Bootloader这桩子事情的爷们和妹纸,他们只是想对手机有完全的掌控权,他们可能是程序猿、主题制作者、开发人员或者甚至 是手机黑客————这些牛13的人总想着能够一点一点的榨干手机的性能,或者让手机变的更好。这些人在网上很活跃,以至于我们这群用户总认为,黑客 Geek才是Android用户群的主体,而事实上,不是这样的。(译者注:此话不假⋯⋯UK街头N多奇形怪状的人都是Android用户)。

那为嘛手机制造商和运营商想锁住Bootloader?这有神马意义?

简而言之,为了安全————在经济利益上,不论是对于你的运营商而言还是对于最终用户而言。

每当我们讨论有锁的Bootloader的时候,我们大多数时候,指的是一个disk image,它能在手机启动的时候检查手机某个重要模块并检查其签名是否符合要求。这样吧,让我们来仔细探讨这件事情。

当你摁开你的Atrix 4G、或者HTC Sensation,Bootloader首先起作用,然后移交给bootimage(这boot image存有你手机的启动文件)。Boot image读取手机的Kernel(内核),然后启动Android,然后就没有然后了。你刷机的时候,是把这个boot image刷入手机的存储器,不是RAM或者说运行内存,这就是所谓的风险。如果这一部虾米了,比如说你刷了一个错的boot image,那手机就有可能虾米(译者注:比如我刷虾米过一个G1),手机就成了砖⋯⋯不过这个风险不算很大,当然也取决于你打算改到多么底层的文件了, 也同时取决于手机的不同。

如果你的手机不幸被锁了Bootloader,那么很不幸,你只能去刷那些有官方签名文件的ROM(译者注:比如现在的Moto Milestone就是杯具机之一,所谓Milestone的刷机都是伪刷机,通过混刷实现的,和真正刷机的效果不可同日而语),而且你不能自己编译并且 刷到手机里面。对于Recovery而言,也是这样,它也会检查签名,完后你没有签名,于是不能刷定制的Recovery。这一坨话的意思归结为一点,就 是:

我们不能在锁了Bootloader的手机上安装自制内核或者任何启动文件

不过锁了Bootloader的手机,不影响咱root(译者又注:比如Milestone锁了Bootloader但是依然可以root)。 Root只是利用了系统安全的一个缺陷来向系统文件中注入相关破解文件,这样每次我们需要用到root权限的时候就可以随时取得。(译者继续注:比方说没 有root权限你就不能删系统的Loader、不能截图、不能OpenVPN)。

继续讨论安全的部分,如果你手机上的软件都是运营商和手机厂商给你安装的,那么基本上手机是没有安全隐患的(山寨厂的手机除外),除此之外,厂商还 会定期推出补丁包供你升级。当然这个修补漏洞的过程基本说是无穷尽的,通过锁Bootloader的方式,制造商可以尽可能的掌控并修补你手机上的安全漏 洞。不过你还记得不,一开始我们就提到过,并不是每个Android用户,都能读到这篇文章,也并不是每个人都知道厂商发布的那些升级包是做什么用的。卖 你手机的厂家可是不只会为你一个人提供升级服务的,人家会给n个相同型号的手机提供升级包。

于是通过篡改手机里的某些文件,我们可以破坏运营商的利益。你比如,通过搞起PRL,可以让你处于Virgin合约下的Optimus V手机使用Verizon的3G信号漫游,然后烧的账单却是Sprint来埋。(译者注:Virgin Mobile、Verizon和Sprint都是米国的运营商),或者开启HTC Spire的HSPA+功能,绕过T-Mobile的数据流量限制,未授权即可使用无线网络分享、或者篡改时间片循环时间、删掉Microsoft和运营 商达成合约在手机上使用的默认的Bing搜索引擎。这些运营商的策略在我们看来完全的不合理,不过你做了上面任何一条,都会极大地损害他们的利益。

于是,他们就得想办法阻止这件事儿的发生啊。

但是Thunderbolt锁了Bootloader不是么,那为毛这货还能有自制ROM和CyanogenMod呢?

嗯,没错,Thunderbol是锁了Bootloader,而且也确实有自制ROM和CyanogenMod。破解Thunderbolt的开发 者用了点小技巧+一些运气才成功的。他们动用了一个新版的Bootloader,这货他们可以刷,于是就用这个作为漏洞破进系统然后刷了 Recovery,从而是机器能够刷未经签名的镜像。灰常需要技巧、灰常的幸运,于是我们没理由总盼这种天上掉馅儿饼的事情。

够了,别白话了,我知道解锁了的Bootloader很华丽,那跟我有毛关系?

有N多关系。首先拿到一个已经解锁Bootloader的手机,你几乎能做任何事情。

Droid X的开发者是一群极其牛13的家伙们,因为他们不能刷ClockworkMod,装在自制镜像或者内核,于是他们就走了另外一条简单粗暴的路线。不过尽管 Droid X如此,他们还是搞出来点儿名堂的。于是同样的事情也会发生在同样锁了Bootloader的Evo 3D身上。与此形成对比的是,Nexus S 4G刚刚上市就被root,然后内核也被重新编译、自定Recovery也都做好了,这些几乎都在一天之内完成,全都因为Nexus S 4G是没有锁Bootloader的机器。

我们不知道HTC打算怎么处理这个解锁Bootloader的策略,不过大家都猜想很可能类似Sony Ericsson的方式——先发锁上Bootloader的手机,然后再提供给愿意解锁的用户解锁的方法。他们可能会让这类解锁的设备跳出和运营商的合 同,不过这一切都只是我们YY出来的结果,不过我确定HTC不久后会给出答复的。

当你拿到一个解锁Bootloader的手机后,对于这个手机的挖掘步骤就跟事先录制好的宏一样:先是会有root、紧接着有自定制ROM、然后就 是从其他ROM或者设备里面移植新特性过来。这也是为毛那么多人喜欢Android的原因所在。总而言之,解锁的Bootloader,意味着自定义内核 ——你可以超频手机、开启USB Host功能以及一大堆锁Bootloader的设备没法实现的功能。当然,也意味着,特别是HTC的设备可以用上MIUI和CyanogenMod。

和你一样,大家都很乐于见到自己的手机有一堆一堆的自定ROM出现。如果这正是你喜欢的用手机方式,那么可以去找一台ROM支持最多的手机 happy去,如果不喜欢折腾,那么继续用着原厂ROM也是一种很稳健的选择。不管如何,我们希望这篇文章能够解答你关于Bootloader的疑问

Via ss1271的奋斗 ,译自 Android Central

作者: musiXboy 分类: 技巧 标签: ,

小技巧:强迫你的 Android 手机检查系统更新

2010年12月30日

你刚刚读到或听到了手机的某个更新,也许只是错误修正,又或者是大的版本更新。不过你的手机没什么反应,只能傻等吗?这时你可以键入一些字符“手动”迫使手机检查是否有可用更新。

如果你的手机运营商没有提供更新,那么这一招当然也不会起什么作用。不过你可以以此来检查运营商是否提供了可用的更新,甚至你还可以打开 Settings(设置)菜单,选择 About phone(关于手机),然后点击“Check for system updates”(检查手机更新)选项来试试。有时候这并没有什么用,不过这倒是也没什么坏处。

为了让你的手机马上进入更新队列,你可以在拨号盘里输入 *#*#checkin#*#*。我使用这个方法让 Nexus S 得到了一个错误修正更新,其他 Android 手机用户可能在不同的网络,比如 Droid Eris 是在 Verizon,不过好像也有人成功了。你可以试试看,不过不知道你会不会觉得自己像只小白鼠。

via gizmodo

作者: wode 分类: 技巧, 新闻 标签: , ,

将 Android 2.3 里改进的键盘提取到 2.2 手机里

2010年12月8日

Android 2.3 SDK已经到来,所以各种高手们纷纷开始了对2.3的探索。目前Droid Life鼓捣出来最实用的一个进展就是将2.3里改进的键盘提取出来,打入到2.2里使用。

不过目前移植到2.2的新键盘还有些缺失的功能,比如不能自动完成,所以也许你还可以再等等完美的移植。如果你等不及想立即体验的话,可以到这里下载需要的文件和移植步骤指南,当然,你的手机必须是root过的。

Via Download Squad

作者: musiXboy 分类: 技巧 标签: ,

摩托罗拉的 Defy 已经被成功 root

2010年12月4日

你想 root 手里的 Defy 么?如果想的话,让我们开工!XDA 论坛的上的高人们已经为你做好了充足的准备,仅仅需要简单的7个步骤而已!甚至你还可以使用 disturkis4u 的一步到位程序!

首先,我们推荐你试试 disturkis4u。建议你先到 Android Market 上下载一个 z4root 应用来安上,然后只要轻轻一点就可以 root 完成。如果一切都很顺利,那么恭喜你。记住,通过下面的方法,也可以root,由于各人的情况可能不同,所以也可能会出现难以预料的结果。所以要小心谨慎的操作!Pedrodh 给了我们另外一种方法,所需文件都包含在 zip 文件中,你需要下载:http://www.mediafire.com/?kjee8aj22j9m5zj ,下载后然后按照 XDA 论坛上的方法来操作。

via androidcommunity

作者: wode 分类: 技巧, 新闻 标签: , , ,

T-Mobile G2 超频到炫目的 1.9GHz

2010年11月16日

T-Mobile-G2_Landscape1-550x412

谁说 G2 慢?我们如何让这个 800MHz 处理器提升到一个更高的档次?只有一个东西可以一劳永逸──那就是超频,大不了手机就是融化了呗……G2 的速度现在已经提升了两次,最终达到了 1.9GHz 的超高频率。

这是 XDA Developers 论坛上的强人实现的。如果你想尝试一番的话,去 XDA Developers 取经吧。

via phandroid

作者: wode 分类: 技巧, 新闻 标签: , ,

三星的 Galaxy Tab 可以在全屏模式下运行所有程序 [视频]

2010年11月10日

关注 Galaxy Tab 的同学可能已经注意到在 Galaxy Tab 上有很多 Android 应用不能充分的利用屏幕空间,会在内容的周围留下讨厌的黑边。现在好了,你可以赏心悦目的使用这个平板了,Engadget 的一个朋友 JKK 找到了一个办法来解决这个问题,就是用 Spare Parts──Android Market 上的一个免费的应用,在重启几次之后,他确信 Engadget 应用可以在全屏模式下运行了。太棒了!当然我估计最开心的应该是 Galaxy Tab 的用户吧?想知道如何实现的话,请看视频吧:

阅读全文…

作者: wode 分类: 应用, 技巧, 新闻 标签: , ,

看图说话 – Android UI 设计秘笈 :Part II

2010年9月28日

Android 的官方开发者博客发了一份幻灯片,介绍了一些 Android UI 设计的小贴士,Roger 在这里以看图说话的形式发出来,有兴趣的读者就继续往下翻吧。整个 PPT 共分5个部分,Part II 翻译的是第三部分。

翻译的第一部分在这里


你必须了解(使用)的 UI 框架特性。


使用相对布局管理界面元素。

译者注:相对布局和线性布局是Android里面常用的两种布局,线性布局比较简单,而相对布局可以做出比较复杂的布局管理,所以仅仅了解线性布局,很多时候是不够的。不过以作者之前Qt的经验来看,Android里面的布局管理功能都比较阳春也不太容易使用,不过这可能是跟移动平台的性能考量有关系。


使用资源修饰符来修饰同一套资源的多个不同版本。
1,一个apk包里面会包含所有的资源文件。
2,系统在运行时会根据软硬件环境来自动选择相应修饰符版本的资源。

译者注:最常用的修饰符可能是locale修饰符(制作多语文本),dpi修饰符(为不同密度的屏幕制作不同尺寸的图标和皮肤),orientation修饰符(为横屏和竖屏提供不同的UI布局)。如果系统找不到对应的修饰符版本,它就会选择无修饰符的版本,这个版本通常也是所谓的默认选择。


使用 9-patch drawables – foo.9.png
1,9-patch drawables 的语法跟CSS3 border image 类似
2,根据边缘的像素宽度切割出不同的拉伸区域
3,最好同时提供 mdpi 和 hdpi 的版本

译者注:drawables 在 Android 里面跟 WPF 里面的 Drawing 类似,用于定义一个可绘制的对象,包括位图,刷子,填充颜色或者以上物件的组合等等。所谓 9-patch drawables,就是将一个 drawable 按照定义的 4 个边缘的宽度大小切割成9个区域,包括4个角落,4条边缘和一个中心区域,当把这个 drawable 绘制到一个任意矩形区域时,drawable 的各个区域有不同的拉伸控制(角落不拉伸,横边横向拉伸,竖边竖向拉伸,中心区域横竖向都拉伸)。通常使用 9-patch drawable 一般是为了绘制出比较漂亮的带圆角背景,这样可以避免圆角及边缘被任意拉伸导致变形。当然,如果你的程序里面绘制的图像和目标区域大小完全一样,就不需要那么麻烦,不过以 Android 的状况来说,为了适应多种设备,最好不要事先假设目标区域的像素大小。



使用 Selector (state list) drawables (状态列表)来提供不同状态(normal,disabled,focused,pressed…)下的绘制图像。



使用 Layer drawables (多层叠加)来制作具备复杂效果的可绘制图像。

译者注:所谓多层叠加,使用PS来制作图标和皮肤的同学可能都清楚,比如说一个按钮的PS模板通常会包括所谓的background层定义底色,mask层定义轮廓,shine层定义前景的高亮效果。而 Android 里面允许你直接在 XML 脚本里面使用 Layer drawables 的语法来定义上述的多层叠加效果,这样可能比在PS里面直接做好要更灵活一些,并且有的层可以是来自png位图,有的层可以是直接通过 XML 脚本生成(比如纯色,过渡色等等)。

看图说话 – Android UI 设计秘笈 :Part I

2010年8月31日

Android 的官方开发者博客发了一份幻灯片,介绍了一些 Android UI 设计的小贴士,Roger 在这里以看图说话的形式发出来,有兴趣的读者就继续往下翻吧。整个 PPT 共分5个部分,Part I 翻译的是前两个部分。

P1

P2

作为开发者,为啥我们要关心UI,前面的一堆通通可以忽略掉,直接跳到最后一条。因为好的UI设计可以帮助我们卖出更多拷贝,赚到更多钱^_^


这个 PPT 包含5个部分:
1>该做什么,不该做什么
2>设计哲学和考量
3>你必须了解的 UI 框架特性
4>新的 UI 设计模式
5>图标和准则


Don’t:
1>不要照搬你在其它平台的UI设计,应该让用户感觉是在真正使用一个 Android 软件,在你的商标显示和平台整体观感之间做好平衡
2>不要过度使用模态对话框
3>不要使用固定的绝对定位的布局
4>不要使用px单位,使用dp或者为文本使用sp
5> 不要使用太小的字体



Do:
1> 为高分辨率的屏幕创建资源(缩小总比放大好)
2> 需要点击的元素要够大
3> 图标设计遵循 Android 的准则
4> 使用适当的间距(margins, padding)
5> 支持D-pad和trackball导航
6> 正确管理活动(activity)堆栈
7> 正确处理屏幕方向变化
8> 使用主题/样式,尺寸和颜色资源来减少多余的值
9>和视觉交互设计师合作!!!



设计哲学:
1> 干净而不过于简单
2> 关注内容而非修饰
3> 保存一致,让用户容易投入其中,可附加少许变化
4> 使用云端服务(存储和同步用户资料)来加强用户体验


优秀界面的设计准则:
1> 关注用户
2> 显示正确的内容
3> 给予用户适当的回馈
4> 有章可循的行为模式
5> 容忍错误


关注用户:
1> 了解你的用户(年龄,技能,文化,对你的应用的需求,使用的设备,何时何地如何使用设备)
2> ‘用户优先’的设计心态 (用户通常是任务导向的行为模式)
3> 更早,更频繁的由真实用户来测试


显示正确的内容:
1> 最常用的操作需要最快被用户看到并且可用
2> 不太常用的功能可以放到菜单里面


给予用户适当的回馈:
1> 交互式的UI元素最少需要反映出4种不同的状态 (default,disabled,focused,pressed)
2> 保证操作的结果是清晰可见的
3> 多给予用户进度提示,但是不要干扰他们当前的操作



有章可循的行为模式:
1> 行为模式遵循用户的期望(正确的操作活动堆栈,显示用户期望看到的信息和动作)
2> 使用合适的方式来加强功能可见性(可点击的元素就应该看起来是可以点击的)
3> 如果用户完成一项任务需要复杂的操作,重新思考你的设计!!!


容忍错误:
1> 只允许有意义的操作(适当禁用一些按钮)
2> 尽量减少不可回退的操作
3> 允许回退(undo)比使用确定对话框更好(实际上,应该尽量少用确定对话框,它对用户是一种干扰)

如果错误是可能发生的,那它就一定会发生。

- Donald Norman, The Design of Everyday Things 作者


设计考量:
1>屏幕的物理尺寸
2>屏幕密度
3> 屏幕的方向(竖向和横向)
4>主要的UI交互方式(触屏还是使用D-pad/trackball)
5>软键盘还是物理键盘


设计考量:
6>了解不同设备之间的相异之处是非常重要的!
7>阅读CDD,学习设备可能差异的地方
8>了解屏幕尺寸和密度分类

Via Android Developers

用 Android 手机控制电脑

2010年8月24日

感谢读者 wzyboy 的投递。

冬天,北风吹着、雪花飘着,宅男宅女都窝在被窝里不愿出去,但是又想用电脑上个网,看看动漫、打打游戏啥的……钻出被窝就意味着寒冷,待在被窝里就意味着不能玩台式电脑……真的是这样吗?

上面的截图并不是在电脑上截下的,它们是在一只普通的 Android 手机上用 ShootME 这个软件截下的。看了这些截图,你应该明白,要在被窝里看动漫、玩台式机上的游戏不再是难事了。

要实现这样的效果也不难,并不是我在 Android 上装了一个 Windows 操作系统。它只是用了远程桌面功能而已。远程桌面协议的定义请自行查看维基百科

除了微软的 RDP,其它的操作系统,如 Mac OS X 什么的,也是有相应的远程桌面协议的,所以理论上你也可以在 Android 手机上玩 Mac OS X。但是此文仅以 Windows 7 为例进行介绍。

客户端准备

客户端就是你的手机。此处特指装备了 Android 操作系统的手机。至于版本是无所谓的,Donut, Eclair, Froyo 都行,如果你能搞到 Gingerbread 或者 Honeycomb,你也可以试试……手机的配置更是无所谓的。我是拿 HTC Dream 做的测试。HTC Dream 是世界上第一款商用 Android 手机,它的配置在现在看来是相当相当落后的,但是实际情况是用 HTC Dream 远程桌面连接我的电脑也是非常流畅的,没有卡的感觉。

需要的软件是一个支持 RDP 的远程桌面客户端。这里推荐下 Xtralogic 牌的。点击下面的二维码可以下载带广告的免费版。

服务器准备

服务器就是你的电脑。此处特指装备了 Windows 操作系统的电脑。版本么,Windows XP 以上就可以了。Windows 2000 也许……也行吧。不保证。Windows 7 是最佳的。不过由于我常用的 Windows 7 系统里关闭了太多的服务,所以此处以 Windows 7 的同源兄弟 Windows Server 2008 R2 为例介绍。(截图是在 Windows 7 里截的)

RDP 是微软的协议,所以 Windows 里是自带此功能的,不需要再装其它的软件。设置方法如图:(如果你是在网页上看的,点击看大图)

需要说明的是,如果你的账户已经是管理员账户了,那么就不要再点“选择用户”了,直接保存即可。不过需要注意的是,你要使用的远程连接的这个账户是一定要设置密码的,没有密码的账户是不允许连接的。

连接!

远程桌面不一定要求要在同一局域网里的,理论上公网上任意两只设备都能相互连接,但是此处以局域网为例进行介绍。

首先要确保手机和电脑在同一局域网里,在同一网段里。可以把电脑和手机都连接到同一个路由器下面,然后都设置好固定 IP。比如电脑的 IP 是 192.168.0.100,手机上的 IP 就可以设置为 192.168.0.101 什么的。Windows 下设置 IP 的方法是在“网络连接”里,打开“本地连接”的属性 → “TCP/IP 协议 版本4” → “属性”,在这里改。Android 下使用固定 IP 的方法是打开“无线设置” → “Wi-Fi 设置”→ Menu 键 → “高级” → “使用静态 IP”, 在这里改。

改完之后两只设备应该可以互相 ping 通了。可以在 Android 上任意终端模拟器上输入 ping -c 4 192.168.0.100 (这是电脑的 IP,请根据实际情况修改),Ping 通了就算设置好了。事实上,很多人家里只要是用路由器上网的,基本都已经在同一网段了,这些设置都可以省略的……只要知道电脑的 IP 就可以了……

打开手机上已经安装好的“远程桌面”程序,按 Menu 键 → 添加服务器。地址就填刚才电脑的 IP,用户名填你在电脑上的登录名,确切地讲是你加入远程桌面允许用户列表里的名字,密码就填你电脑上的密码,接下来几个都可以不填。下面讲讲分辨率。

一般来说,手机的分辨率是小于电脑的,所以如果在分辨一栏选择了一个大于手机分辨率的值,那么手机就只能看见一部分屏幕,需要靠滑动来查看其它的部 分,就像一个网页一样,要上下拖动才能看完整。如果把视图缩小,那么的确是可以看完整的,不过字也就变小了。如果选择“适应屏幕”,则是把远程桌面的分辨 率设置成和手机分辨率一样的,这样既是完整的,又是字正常的,但是这样的分辨率下可能有一些电脑上程序不能完整显示。在题图中,第一、二、三张图选择的是 适应屏幕的分辨率,第四张图是选择了一个大于手机屏幕分辨率的分辨率。

综上,如果你的手机的屏幕分辨率本来就比较高的话,比如 Nexus One, Milestone, Desire 啥的,就选择适应屏幕好了,你会感觉你在用上网本的,如果你的手机屏幕分辨率比较低,比如 Dream, Magic 啥的,就选择一个标准分辨率 1024×768 好了,或者可以选择一个 960×480 (长宽都是 480×320 的两倍)的分辨率,然后视图缩至最小,个人感觉那样的字还能勉强看清,题图中的第四张就是这样的分辨率。

全部填好后,点“保存”,然后这个配置就被存储下来了,以后只要启动程序,连接之就可以了。

附注:

  1. 远程桌面只是传输视频和音频信号,所以即使你在用远程桌面玩电脑上的游戏,手机也不会感到卡,因为游戏是运行在电脑上的,传到你手机上的只不过是一个视频和音频信号而已。
  2. 玩这个东西当然是屏幕分辨率越大越好,我曾经见过有在 iPad 上装远程桌面连接 Windows 7 的……
  3. 最好用一只用实体 QWERTY 键盘的手机来玩这个,比如 Dream,Milestone 什么的。

Via wzyboy’s blog

作者: musiXboy 分类: 应用, 技巧 标签:

Android Cloud to Device Messaging 服务介绍 – 如何从云端推送消息到手机

2010年8月19日

译者前言:

基于 Android 的手机是面向移动互联网的手机,保持24小时在线才能充分发挥它的全部能量。而 Google 也在不断提供各式各样的网络服务来吸引用户,有的服务是直接面向终端用户,而有的服务是面向开发者,期望开发者可以利用 Google 提供的这些服务来制作新形态的 Apps 和创造新的服务类型,当然 Google 也会从自家的服务被更多用户访问来获得收益。

Google I/O 2010 介绍了 Android 2.2 导入的 Android Cloud to Device Messaging (C2DM) 服务,也演示了在PC端,把浏览器正在浏览的网址或者在 Google Maps 上定位的位置发到 Android 手机上,而手机会直接通过浏览器打开该网址或者通过地图软件定位该位置。

前不久 Chrome to Phone 已经正式发布,可以让 Android 用户在自家的 PC 和 手机上亲自使用该功能。而 Chrome to Phone 的作者 也发表了一篇技术文章,介绍了C2DM 服务的一些细节。

Dave Burke

Dave Burke

翻译正文:

Android Cloud to Device Messaging (C2DM) 作为 Android 2.2 的一部分已经发布了。C2DM 允许第三方开发者开发相关的应用来推送少量数据消息到用户的手机上。C2DM 创造了一个良好的机会,允许我们使用多种 Google 开发工具来创建一种简单但相当实用的应用类型。用户可以使用该类型的应用把各种各样的信息从他们的台机或者笔电直接 push 到自家的手机上。来自 Google 20% 工作时间的一个实验性项目 Chrome to Phone 演示了这种类型的应用。

Chrome to Phone 包括了一个 Chrome Extension,一个 Android Application,和一个 Google AppEngine 服务器。所有的代码都是开源的,可供其它开发者参考如何使用 C2DM。

Chrome to Phone 的消息流是一个很典型的推送服务:

用户使用 Android App 在 C2DM 服务器上注册,获得一个设备注册 ID,这个 ID 跟用户的 Google 帐号绑定在一起,并且由 AppEngine server 来维护。 AppEngine server 在验证用户账号的合法性后记录下用户账号跟用户 C2DM 设备注册 ID 之间的映射关系。

Chrome Extension 获得浏览器当前访问的网址和标题后,把它们发送到 AppEngine server。 AppEngine server 验证当前登录的 Google 用户账号后,通过该账号查找到对应的 C2DM 设备注册 ID。然后通过 HTTP 把 URL 和标题发送到 Google 的C2DM 服务器。用户手机上的Android 系统(2.2 以上版本)会一直监听来自 C2DM 服务器的推送消息,当 C2DM 服务器接收到 AppEngine server 发送过来的消息,并且这个消息是发送到用户手机所绑定的 C2DM 设备注册ID 时,就会发送给用户手机,而手机上 Android 系统收到消息后则会发起一个 Intent broadcast(意图广播),接着跟该 Intent 对应的 Android App 被激活,再把这个 Intent 转换成相应的新 Intent 并路由到其它 Apps 上面去(比如浏览器,拨号软件,地图软件等)。

(路由路径:”Chrome to Phone” Chrome Extension(PC)-> “Chrome to Phone” AppEngine server -> C2DM server -> Android OS(Mobile) -> “Chrome to Phone” Android App -> Android Browser)

"Chrome to Phone" Chrome Extension

"Chrome to Phone" Chrome Extension

这里一个有趣的设计是像 URL 和标题这样轻量级的数据会附随在推送消息上,直接从 C2DM 服务器发送到手机上。URL 会使用hash编码产生一个 collapse_key 来防止重复发送。另外一个可选的方式是(也更适用于数据量较大的情况),服务器只发送简单的推送消息来激活手机上的 App,然后 App 再访问服务器获得额外的数据。

Chrome to Phone 的代码可以在网上找到。 AppEngine 和 Android App 代码都包括了一个可重用的包 com.google.android.c2dm 用于处理底层的 C2DM 交互事务 (例如配置,任务队列管理等)。

Chrome to Phone 提供了有用的功能,不过它最有趣的地方是在于提供了如何使用 Android C2DM 服务的示例。

译后语:
Google 的 Android C2DM 服务能够像 LBS 一样催生出一系列新的应用类型吗?利用从云端的服务器往手机推送消息的功能,让手机跟网络上的其它机器,包括服务器,用户自己的PC等更紧密的联系在一起,的确提供了一个智能设备跟移动互联网之间如何无缝衔接的一个范例。

读者您是怎样看待 Android C2DM 这样的服务呢?欢迎留言。

Via Android Developers