临近十一,项目接近上线,终于有些碎片时间可以查看一些博客。
这篇博客是Android开发大牛Cyril Mottier在去年写的博客,我把它翻译一下共享给国内志同道合的朋友,同时也是对自己一个很好的锻炼机会。
原博客的地址是:http://cyrilmottier.com/2013/06/27/a-productive-android-development-environment/,在国内是可以打得开、看得到的。
原文的翻译,全文如下:
在过去的6个月,我的Android开发环境改变了很多。如果在Google+或者Twitter上有关注了我并阅读过我最近有关开发的小建议的话(这个如果你翻得了墙的话,在Google+和Twitter上搜Cyril Mottier是可以关注的),你或许已经注意到了这些变化。我热爱讨论UI和性能,但也严肃地认为在友好开发和打磨Android应用的过程中,工具的确是关键的存在。在本博中,我将分享自己的经验和每天编码时使用的工具:
- 极其迅速的虚拟设备:Genymotion
- 功能强大的IDE:Android Studio
- 高级构建系统:Gradle
开发惊艳的应用需要精力、激情和奉献。但我也相信:杰出的应用源于杰出的开发环境。的确,我问题认为应用是开发人员所使用工具的镜像。运行顺畅的模拟器导致更快的测试,依次地,更快的测试将产生更多精良的应用。同样地,直观而用户友好的开发工具将启发并强化开发人员的UI/UX设计,更重要的是,这些设计将反映在他们的产品中。
简单地说,我确信我们正在使用的开发工具的质量是我们正在进行创造的应用的质量的直接结果,并且,这种看法反过来亦是如此。一直以来,我总是失望于原生的Android开发工具是多么的粗俗和原始,但是,似乎有迹象显示Google现在正异常明晰地转向精良和高产的开发工具。除此之外,我还异常兴奋地看到一些如Genymobile之类的公司正在助力于整个生态系统朝这个方向转变。
Genymotion
你很可能对Genymotion这个名字全然不知。但我向你保证这种情况不会持续太久。一旦尝试一下Genymotion,你将很快学会记得它。简而言之,Genymotion是默认Android模拟器功能齐全的替代品(由于最近Android版本严重的性能缺失,默认模拟器已经变得无法使用!)。Genymotion可能从http://www.genymotion.com/下载。Genymotion基于Virtual Box,因此,它将虚拟而非模拟一个Android设备。
我不认为自己是一个虚拟化/模拟化专家,但是,看起来模拟化不再是一个有效选项。至于今天,iOS SDK提供了模拟器(瞄准主机体系结构来编译应用),最新的Windows Phone SDK绑定了事实上是虚拟机的Windows Phone模拟器。我感觉虚拟化是以下两个问题的最佳解决方案:模拟器固有的性能问题和常为人诟病的”二进制差异”问题。
如果已经尝试过了Genymotion,你就已经清楚了存在于默认模拟器、硬件设备和Genymotion之间的关键不同:速度! Genymotion极其流畅,使得Android开发成为了一件愉悦之事。Genymotion解除了从工作站转向硬件设备来进行测试的负担。多亏了这个小小的令人拍手称赞的软件,自己工作站上的一切开发都显示那么顺利。
为了证明Genymotion是多么的快速,在本人的硬件设备(Nexus 4)和运行在本人MacBook Pro上面的一个Genymotion实例上面分别运用一些指令测试运行了一个小的测试工程。这些输出信息是不言自明的,Genymotion上面运行的指令测试的速度至少是Nexus 4上面的10倍快。
我第一次尝试使用Genymotion的时候它还是以AndroVm的名字为人所知。在那时,这个产品就显然拥有很大潜力的一件工具。但是,打磨的缺失和设置的晦涩使得它在大多数开发环境里徘徊不前。最新的软件版本清晰地表明Genymobile(Genymotion背后的公司)决定推动Genymotion到下一层次。
在看过Genymotion小组在Droidcon France进行的新颖的演示 之后,我决定再试一次它。在不到一个小时的把玩和测试之后,我决定在以后开发的每一天使用它。多亏了Genymotion,我个人的硬件设备只有在现时/最后开发阶段的测试时才显示必要。
速度是Genymotion最重要的方面之一。然后,它还是提供了其它的一些好的特性:
- 经测试可靠的 ROMs: 这个小组正在努力工作,以确保Genymotion ROM兼容CTS。他们最新宣布Genymotion已经通过了AOSP CTS的99.4%。我们可以期待Genymotion ROM很快就完全兼容于CTS。
- 硬件管理:你已经可以用很酷的方式模拟大量的东西。我最喜欢的东西之一是GPS感应器管理。你只需在地图上移动一个标记,之后Genymotion发送恰当的GPS定位。这在开发定位应用时极其方便。
- 支持Google Play Services:一些绑定了Google应用的Genymotion ROM,具有和真实设备完全相同的特性。由此,你可以安装并测试诸如Google Play Services一样的框架(frameworks)。它让你能够测试自己的应用,即使这些应用使用了Google Map API v2或者定位API。
- 完全整合了Andorid Studio和Eclipse:Genymotion在启动或创建虚拟设备的眨眼间展示了简单的UI。如果你不喜欢这个小小的软件,你可以选择使用Eclipse或Android Studio/IntelliJ插件。
- 平*立性:就像你可以在Windows、Mac OS X或者Linux开发Android应用一样,Genymotion伴随了不同平台的版本:每个平台/体系结构一个版本。
- 支持Shell操作:Genymotion提供了极小的Shell,使得你可以以脚本的方式改变感应器的状态。
我们必须清楚,拥有快速的虚拟设备并不意味着你不必在起初设备上进行测试。它只是个好机会用更快的方式来塑造原型和打磨应用。然而,真实设备才是保证在真实情形下一切事情流畅运行的最佳方式。
Genymotion仍然有一些不足:少量的Bugs、缺失的特性以及令人失望的UI(我是这么觉得,毕竟,这还只是个测试版本)。但是,令人称赞的迅疾、真正的潜力以及对开发环境轻易的整合,都使得它成为你工具箱中明智的选择。我个人了解一些Genymotion小组中的家伙,并对Genymotion的未来信心满满。他们努力工作以改善这款工具——一个很可能是自Android2008年发布以来在模拟/虚拟/仿真技术上面的最大进步。
Android Studio
大约5年前,我开始开发我的首款Andriod应用:一个校园项目。在那时,framework只能作为早期的翻阅使用。我因如下两个重要原因而选择Eclipse作为我的主要IDE:
- Eclipse是计算机科学课上所要求的IDE。
- Eclipse是唯一绑定了Android插件的IDE。
大约6个月前,我转向了IntelliJ。时间再近一点(自Google I/O之后),转向了Android Studio。这些转变之后的原因逻辑清晰。事实上,对于我的大多数项目而言,Eclipse开始变成了令人讨厌的东西。主要是Eclipse运行太慢且经常崩溃。在用了几乎5年Eclipse之后,转向IntelliJ/Android Studio并不容易但也并不痛苦。这个学习弧线十分的令人印象深刻:习惯新的快捷键、新的外观和这个IDE的一些主要特性花费了我一整个周。
除了快和稳定之外,Android Studio相较于Eclipse有几个优势,你可以通过下载、把玩这个软件或者观看Google I/O Keynote和“What's new in Android Development tools” session Tor Norbye & Xaview Duchohet来查找。
当开发中的Android Studio依然是”I/O预览版”时,版本号为0.1.6。版本号也许不涉及最终的版本,Android Studio依赖于世俗的肩膀。如果你不喜欢Eclipse或者正在寻找新的东西,你绝对应该尝试一个Andrioid Studio。
Gradle build system
在Google I/O大会上,我想要了解有关Andriod开发工具的所有改进。我显然参加了所有有关新的基于Gradle的构建系统的话题讨论。尽管Gradle插件依然处于开发阶段(在开发时是0.4.3),我已经在强烈地鼓动人们在他们的项目中使用它。
我最近把所有的的项目都转向了Gradle插件。在这之后的原因是:这个新的构建系统最终要处理Android开发人员可能需要的所有特性。此外,Android Studio结合了Gradle才能最好使用。再说一次,这个插件当然不完美,但我确信Android工具小组正努力打磨这个新的构建系统。
我最欣赏的几个特性是:
- 包重命名:如果想要你的应用在相同的设备上同时有测试版和发布版(甚至更多),这将特别有用。
- 强大的依赖管理:尽管对于Maven用户而言,这并不新颖,但是这对于使用当前基于Ant构建系统的开发人员而言,却是一个巨大的跨越。
- 完善和开发相似的构建:新的构建系统的设计目的是:在可持续性完善的服务器上执行的构建要相似于那些建立在开发人员自己的工作站上的构建。
- 易用且可共享的签名配置:新的插件共享工程的签名配置。如果你想要调试键可以被你的小组中的所有开发人员使用,这将极其有用。
- 产品口味(Flavors):口味是特殊版本的应用,这个应用可以用不同的包名、版本名和版本号等。在你需要几个APK输出时:免费版和收费版时,这很可能有用。
如果你想要发送反馈、报告bugs、寻求帮助等,我鼓励你加入adt-dev Google group。可能性很大,一些人像Xavier Ducrohet(Android工具小组的Google工程师)将帮助你(当然,万一你提出了完整且准确的问题)。这是一些重要的链接,帮你转向你的基于Gradle的构建系统:
- 最新版本构建系统的新特性:http://tools.android.com/tech-docs/new-build-system
- 新的Android SDK构建系统:http://www.youtube.com/watch?v=LCJAgPkpmR0
- 新构建系统文档:http://tools.android.com/tech-docs/new-build-system/user-guide
- Gradle Wrapper文档(Google推荐):http://www.gradle.org/docs/current/userguide/gradle_wrapper.html
- 包含大量有趣实例的压缩文件:http://tools.android.com/tech-docs/new-build-system/gradle-samples-0.4.2.zip
总结:
本博所描述的全部工具使得Android开发系统比之前更高效、更高产。他们全是进行中的工作,但却已经提前证明Android拥有明亮的未来。除了来自于Genymobile十分强大的Genymotion,新的Google助力的工具如Andrid Studio和新的Gradle构建系统等对于自证前程的Android开发工具而言是极其明智的举措。
如果你依旧在考虑做什么,我对你的建议是:不要犹豫了,不要再想了,通过转向这些极其精良的工具来改革你的Android开发环境,并且帮助这些工具变得比现在的好还要好!
PS:
尽管Genymotion很好理解且已不证自明,我依然严格地认为Genymotion的UI可以更简单些。从功能和特性的角度来看,Genymotion已经极其优秀。但是缩减由于当前低效UI所导致的摩擦可以使Genymotion真正地具有革命性和突破性。
一些APIs和framework诸如Google地图Android API需要API键,应用基于该键来对APK进行签名。在项目层次上共享开发人员间的键,或许可以减轻来自于管理几个API键的负担。
***********************************************************
这篇博文只是作者的经验总结,总体上来说,没有什么二货,但也是值得拜读的,同是也可对Android开发大牛们平时的神秘工作“窥一斑而知全豹”。