除了高超的武艺,每位黑忍者还需要装备最好的武器。在软件开发的世界里,好的工具能让我们的生活变得更轻松,在更短的时间里写出更棒的代码。

时光回到2008年,那时安卓还很年轻。只有几个相关的博客和谷歌官方的几个应用开发教程,没有函数库也没有代码生成器,甚至连成熟的设计模式也没有(除了OOP和一些Java实践)。今非昔比,我们已经有了一个成熟的OS、很棒的开发工具、稳定的Eclipse插件和其他IDE,数不清的开发书籍和相关的技术博客。

这里,我想分享自己在开发安卓应用时用到的工具和一些技巧,希望可以让大家少走一些弯路。

1. 资源

所有的UI指南都可以在这里找到。有些时候我们需要快速地找到资源,我们需要工具栏图标、主题、其他图标和各种安卓应用需要的设计资源。Android Assets Studio是最佳工具之一。它可以为你生成各种分辨率 (mdpi, hdpi, xhdpi)的启动器、标签、工具栏、菜单图标,可以按照你的配色生成主题,还可以生成工具栏资源 适用于Sherlock Action Bar。转换和缩放DPI是很痛苦的,所以你需要Android Dpi Calculator

2. UI组件

只要遵循安卓官方的UI设计理念,我们就在重用UI组件。有很多优秀的通用组件可以利用,当然你可以基于他们开发适合自己的组件。你可以在Android Views上找到他们。这里我只提出几个“必备的”组件:

  • Sherlock Action Bar:作者Jake Wharton。这个工具栏设计扩展了支持函数库,可以通过一个API操作各个版本的安卓工具栏。该函数库会在合适的时候自动调用原生工具栏,也可以在你布局基础上封装一个自定义实现。这样你就可以很轻松地为各种2.x及以上的安卓版本开发一个带工具栏的应用。
  • Sliding Menu:这是时下非常流行的UI模式。Google Play市场上很多最佳应用都采用了这个UI模式,比如Google Plus、Facebook、Youtube以及其他的应用程序都采用了Sliding Menu。
  • Cards:一个非常漂亮简介的UI组件,可以让你的应用看起来和Google Home一样。你可以在屏幕上添加一个或者层叠若干个卡片。

3. 函数库

安卓应用不仅仅是UI,还包括了很多颜色和图片资源。Optimus Prime(译著:《变形金刚》里面正义一方的领袖)曾经说过:“真相不只是眼前所见”。我们还需要编写后台代码加载和缓存图片、加快与服务器通讯、编写数据库操作工具等等。接下来,我们理所应当地会重用一些最佳实践代码。我的最爱(以及常用的工具)包括:

  • Android Universal Loader:高度可定制图片下载和加载函数库。支持从缓存或文件加载,配置非常简单。
  • Spring for Android:如果你没有听说过Spring…那么请先去搜索一下。这个最流行的Java框架已经将他的产品线延伸到了移动领域。正如他们所说“移动就是未来”。Spring for android提供了几个很棒的函数库和框架,包括:
    • Spring RESTtemplate:一个非常流行的基于Java REST客户端。Spring for Android RestTemplate模块提供了一个可以在安卓环境下工作的RestTemplate版本,为你的安卓应用程序提供了一个非常灵活的REST API。
    • 验证支持:OAuth是该领域快速崛起一个的协议。OAuth是一个开源协议,为用户提供第三方应用支持,提供对其他网站受限资源或服务的访问。
  • Square:他们在GitHub上发布了很多优秀的函数库。我最喜欢的是RetoFit,正如他的介绍那样“一个类型安全的安卓和Java REST客户端”。
  • OrmLite :编写和维护数据库表通常是很乏味的。OrmLite是一个支持安卓和Sqlite的ORM框架。通常完成这项工作会有数不清的备选工具,但是如果你正在创建一个需要很大数据库的应用也许OrmLite会是你的最佳选择。最好的事情是——OrmLite是通过注解驱动的。
  • AndroidAnnotations:UI和代码之间的粘合剂,通过它可以编写更少的代码并且轻松维护现存的代码。

4. 测试

作为开发者,我们会不时地进行一些测试。毕竟,我们必须确保开发的程序能正常工作。能遵循测试驱动开发(TDD)当然最好,但是有时候我们只需要一些简单的测试。这只是我个人的看法,最终选择权始终在你手上。

  • Monkey:检查应用是否会出现ANR(译者注: ApplicationNotResponding应用程序无响应)的最简单、快速和有效的方法。它会在你的应用上执行N次随机点击。你可以在午休时运行一下Monkey。
  • Safe.i j i a m i:Android app漏洞检测工具,可以一键上传测试出app存在的信息安全漏洞、签名信息漏洞、源码安全漏洞等,根据存在的漏洞可以相应的提出对应的解决方案,强大的安卓开发必备工具之一。
  • Android Test :一个基于JUnit的安卓测试框架。它提供了所有类型的测试。你可以为UI/活动编写测试用例。功能测试或者黑盒UI测试不要求测试者对应用的实现细节非常了解,只需要从用户角度了解执行特定动作或者输入特定内容会有怎样的输出结果。这个方法可以让开发和测试人员在你的组织里独立地工作。
  • Robotium :这是一个安卓自动化测试框架,支持原生应用和混合型应用。通过Robotium你可以轻松地编写功能强大、健壮性好的黑盒测试用例。测试开发者可以编写涵盖各种安卓操作的功能测试、系统测试和验收测试用例。此外,Robotium还有一个非常活跃的开发者论坛。
  • 云端测试:你可以在大量设备上运行你的测试并获得所有崩溃和错误信息。相关的工具有:

他们不是免费的,但确实好用。

5. 构建

这是我最喜欢的部分。我们日复一日、年复一年地工作…..是时候展示自己的产品了。你的应用可能会分付费版、免费版或专属版。他们会有通用的部分和一些专有逻辑。也许你会有一个为100个客户定制的应用,不同的包名、颜色、名称、各种资源和产品风格…..我刚才提到了构建版本吗?一个开发版、不同阶段的测试版、生产测试版、客户Beta版…..(软件版本命名)等等。对于不同的应用,有没有头疼的问题,如何保安全?在如今这个打包党泛滥,各种不安全的移动互联网时代,要是不重视安全这块,简直就是给自己挖坑!在此,我推荐我的经验,解决方案就是寻求第三方服务平台的加密技术,既可以达到自己的目的,又节省了自己去研究的时间、精力!

在一天工作结束的时候,秘密就在维护和管理发布流程。对于这项工作,我只推荐下面几个构建工具。

  • Ant:我从Ant开始,因为它是Java开发者最熟悉的一个工具。如果你通过Ant构建一个安卓项目,你会编写一个包含了所有默认构建任务的build.xml,它会为你完成一些简单的工作。如果你需要更高级的功能,深呼吸准备好进一步钻研吧……如果要进行依赖管理,这是更艰巨的任务。
  • Maven:我的一个朋友曾经说过:“Maven管理安卓应用只有Hello World”。Maven从未被谷歌或者安卓官方支持。社区开发的几个Maven插件在安卓构建工具的每个新版本上都会崩溃。Maven配置困难,但维护和运行很容易。它的依赖管理做的很好,但是很多安卓函数库并没有包含在Maven主仓库。
  • Gradle:谷歌IO 2013发布了Gradle。它是安卓官方支持的构建工具,也是Android Studio IDE的一部分。Spring和其他几个业界巨头也都支持Gradle。我发现Gradle的语法简单而且易于理解。我成功地构建了一个简单项目,一个带有复杂构建逻辑的项目并在24小时内从ant/maven上移植了3个项目到Gradle。Gradle的依赖管理很棒,支持从Maven和Ivy仓库获取(pulling)文件以及多项目构建。我得说:Gradle是新的安卓官方构建工具,相关的安卓插件在不久的将来应该会很快开发并支持,所以继续关注。

我总是会鼓励开发者使用并重用经过检验的概念、模式、框架和函数库。当然,只是针对产品的发布版本。你总是需要学习和实验新工具和新框架。因为即使是最差劲的忍者也需要磨亮自己的武士刀:)

编程快乐!

安卓开发经验分享:资源、UI、函数库、测试、构建一个都不能少(转)的更多相关文章

  1. 【转】安卓开发经验分享:资源、UI、函数库、测试、构建一个都不能少

    本文由 ImportNew - 唐尤华 翻译自 gigavoice.如需转载本文,请先参见文章末尾处的转载要求. 除了高超的武艺,每位黑忍者还需要装备最好的武器.在软件开发的世界里,好的工具能让我们的 ...

  2. Android 为开发者准备的最佳 Android 函数库(2016 年版)

    本文是翻译自 CloudRAIL 的官方博客(https://cloudrail.com/best-android-libraries-for-developers/),本文中分享的 Android ...

  3. day12(jsp指令&内置对象&动作标签、JavaBean、EL表达式&函数库)

    day12 JSP指令 JSP指令概述 JSP指令的格式:<%@指令名 attr1="" attr2="" %>,一般都会把JSP指令放到JSP文件 ...

  4. UI设计师不可不知的安卓屏幕知识-安卓100分享

    http://www.android100.org/html/201505/24/149342.html UI设计师不可不知的安卓屏幕知识-安卓100分享 不少设计师和工程师都被安卓设备纷繁的屏幕搞得 ...

  5. 安卓CTS官方文档之兼容性测试套件简介-attach

    官方英文文档原文:https://source.android.com/compatibility/cts-intro.html Compatibility Test Suite  兼容性测试套件 H ...

  6. 安卓CTS官方文档之兼容性测试套件简介

    官方英文文档原文:https://source.android.com/compatibility/cts-intro.html Compatibility Test Suite 兼容性测试套件 Ho ...

  7. 造个自己的Vue的UI组件库类似Element

    前言 随着前端的三大框架的出现,组件化的思想越来越流行,出现许多组件库.它能够帮助开发者节省时间提高效率, 如React的Ant-design,Vue的iView,Element等,它们的功能已经很完 ...

  8. ABP(现代ASP.NET样板开发框架)系列之21、ABP展现层——Javascript函数库

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.NET Boilerplate Project ...

  9. ABP展现层——Javascript函数库

    ABP展现层——Javascript函数库 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之21.ABP展现层——Javascript函数库 ABP是“ASP.N ...

随机推荐

  1. [CareerCup] 18.7 Longest Word 最长的单词

    5.7 Given a list of words, write a program to find the longest word made of other words in the list. ...

  2. [CareerCup] 16.2 Measure Time in a Context Switch 测量上下文转换的时间

    16.2 How would you measure the time spent in a context switch? 上下文转换发生在两个进程之间,比如让一个等待进程进入执行和让一个运行进程进 ...

  3. HDU 5762

    Teacher Bo Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Tot ...

  4. Datatable转换Json

    #region Datatable转换为Json        /// <summary>         /// Datatable转换为Json         /// </su ...

  5. viewPager的基本使用

    viewPager是android扩展包v4中的类,这个类可以使用户左右切换当前的view. 特性: 1.viewPager直接继承了viewGroup类,所以它是一个容器类,可以在其中添加其它的vi ...

  6. JS开发windows phone8.1系列之1

    http://msdn.microsoft.com/zh-cn/library/windows/apps/dn629638.aspx,要点: 1.了解项目结构:package.appxmanifest ...

  7. IOS网络第一天-01基本的HTTP请求

    *************************** #import "HMViewController.h" #import "MBProgressHUD+MJ.h& ...

  8. centos安装vsftp

    yum install -y vsftpd chkconfig vsftpd on 配置问价在/etc/vsftpd/下面 chroot_list 默认没有 必须自己建立 vi /etc/vsftpd ...

  9. Git subtree和Git submodule

    git submodule允许其他的仓库指定以一个commit嵌入仓库的子目录. git subtree替代git submodule命令,合并子仓库到项目中的子目录.不用像submodule那样每次 ...

  10. Thinking in Java——笔记(1)

    Introduction To Obejct The progress of abstraction But their primary abstraction still requires you ...