最佳实践(1):安卓开发

751 查看

这篇文章主要为Futurice公司Android开发者总结的经验教训。遵循这些规范可以避免无谓的重复劳动。如果对iOS或Windows Phone平台的开发感兴趣,请查看《iOS开发最佳实践》和《Windows客户端最佳实践》。

欢迎反馈,但请先阅读反馈规范

摘要

  • 使用Gradle和Gradle默认的项目结构
  • 将密码和敏感数据放在gradle.properties中
  • 不要实现自己的HTTP客户端,使用Volley或者OkHttp库
  • 使用Jackson库解析JSON数据
  • 由于65K的方法空间限制,避免使用Guava并使用尽可能少的库
  • 用Fragment来显示UI
  • Activity只用来管理Fragment
  • XML也是代码,管理好XML代码
  • 使用样式来减少布局XML代码中重复属性
  • 将样式写在多个文件中,避免把样式全部写在单一的大文件当中
  • 保持colors.xml文件的简短干净,只定义调色板
  • 同样也保持dimens.xml简短干净,只定义通用的常量
  • 避免深层级的ViewGroup
  • 避免客户端处理WebView要显示的内容,并且注意内存泄露
  • 使用Robolectric进行单元测试,使用Robotium进行连接设备(UI)的测试
  • 使用Genymotion模拟器
  • 一直使用ProGuard或者DexGuard

Android SDK

Android SDK存放在home目录或者其他跟应用开发无关的位置。一些IDE在安装时包含了SDK,这时SDK可能存放在IDE的安装目录下。而这是很不好的做法,特别是当你需要升级(或者重新安装)或更换IDE时。同时也要避免把SDK存放在系统目录下,否则,当普通用户(不是root)使用IDE时就需要获取sudo权限。

编译系统

编译系统首选Gradle。相比于Gradle,Ant更加的局限并且更加繁琐。使用Gradle编译系统可以很简单的做到:

  • 将应用编译成不同的版本
  • 完成简单的类似脚本的任务
  • 管理和下载依赖
  • 自定义秘钥仓库
  • 其他…

Google正积极的开发安卓Gradle插件,作为新的标准编译系统。

项目结构

主要有两个主流的项目结构:旧的Ant项目结构和Eclipse ADT项目结构,较新的Gradle和Android Studio项目结构。当然选择新的项目结构。如果你的项目正在用旧的项目结构,考虑放弃旧的结构,转移到新的项目结构下吧。

旧项目结构:

 

新的项目结构:

新旧项目结构最大的不同点是新项目结构更加合理的分开了代码集(main, androidTest)。例如,你可以在代码集src文件夹下添加’paid’和’free’文件夹,分别用于存放付费版应用代码和免费版应用的代码。

顶层app文件夹用于将你的应用和其他库(例如:library-foobar)区分开来。Settings.gradle中保存了app/build.gradle需要用到的库的引用。

Gradle配置

普通项目结构。遵循Google安卓Gradle规范
简单任务。可以用Gradle完成一些简单任务,而不用特地去写(shell, Python, Perl等)脚本。具体参考Gradle文档
密码。你需要在build.gradle中配置应用发行版本的签名配置。以下这些情况是需要避免的:

不要这样做。也许你会在版本控制系统中这样做。

换一种方式,新建一个gradle.properties文件,文件内容如下。注意,不要把Gradle.properties添加到版本控制系统中。

KEYSTORE_PASSWORD=password123
KEY_PASSWORD=password789

Gradle会自动导入gradle.properties文件,所以你可以在build.gradle中这样写:

使用Maven管理项目依赖,而不是直接导入jar文件。如果你显式的导入jar文件到项目中,那这些依赖的jar文件只会是某个固定的版本,例如2.1.1。下载jar文件并管理更新这种方式笨拙不堪,而Maven完全解决了这个问题,并且,Maven可以集成在安卓Gradle编译系统中。你可以指定版本的范围,例如2.2.+,然后Maven就会自动更新到版本范围内的最新版本。例如: