听蛙居 - 最佳实践
type: channel
link: http://ubbcn.com/tag/best-practices/
items: [译]Android开发的最佳实践

[译]Android开发的最佳实践
type: item
date: 2014-12-22T15:39:00+08:00
description: 上个月因为工作及个人原因遗漏了一篇博客，于是这个月就多写一篇，相当于给自己一个提醒，再忙，也不能忘了博客这一事情。这次的题目其实是在找资料时不小心看到了，写得挺好，为给自己备一份底，于是就转译过来。照旧，翻译得不好，请轻拍。原文地址：https://github.com/futurice/android-best-practices正文开始Android开发的最佳实践学习的课程来自Futurice的Android开发者网站.根据这些指导方针，可以避免重复造轮子的情况。如果你对iOS或者Windows Phone的开发感兴趣，也可以去看一下我们的iOS良好实践及Windows客户端的良好实践文档。摘要使用Gradle并且用它推荐的项目结构把密码及敏感的数据放在gradle.properties里不要自己写Http请求，使用Volley或者OkHttp库代替使用Jackson的库解析JSON数据避免烂番茄，并且使用65K的限制方法来使用少量的库使用Fragment代替UI界面Activity仅用来管理FragmentLayout的XML也是代码，组织好它们在Layout的XML文件中，使用样式来避免重复的属性使用多个样式文件来避免单位文件过大保持你的colors.xml文件的简短及干净，定义色盘(Palette)就好了同样保持dimens.xml文件干净，定义一般的常量不要把你的ViewGroups层级弄得很深避免客户端去处理WebViews，并且当心一下泄漏使用Robolectric来进行单元测试，Robotium来进行UI测试使用Genymotion做为你的模拟器一直用ProGuard或者DexGuardAndroid SDK把你的Android SDK放在你的主目录的某个地方，或者其他应用程序的独立位置。有些IDE安装的时候有包含了SDK，并且在该IDE的一些目录下。在你需要升级（重装）或者换IDE的时候，这是不好的。也要避免把SDK放在系统目录下，否则，你的IDE在你的角色不是ROOT用户下运行，有可能需要超级(sudo)权限。构建系统默认的选择肯定是Gradle。Ant有更大的限制并且也更冗长。用Gradle是简单的，如下：可构建不同的渠道或者让你的app多样化创建简单的任务脚本管理和下载依赖性(dependencies)自定义keystores更多Google也在新编译的系统中用新标准积极地开发Android的Gradle插件。项目结构这里有两个常用的选项：旧的Ant跟Eclipse ADT的项目结构，新的Gradle跟Android Studio的项目结构。你可以选择新的项目结构。如果你的项目使用旧结构，可以考虑放弃并且迁移到新的结构上来。旧结构old-structure ├─ assets ├─ libs ├─ res ├─ src │ └─ com/futurice/project ├─ AndroidManifest.xml ├─ build.gradle ├─ project.properties └─ proguard-rules.pro 新结构new-structure ├─ library-foobar ├─ app │ ├─ libs │ ├─ src │ │ ├─ androidTest │ │ │ └─ java │ │ │ └─ com/futurice/project │ │ └─ main │ │ ├─ java │ │ │ └─ com/futurice/project │ │ ├─ res │ │ └─ AndroidManifest.xml │ ├─ build.gradle │ └─ proguard-rules.pro ├─ build.gradle └─ settings.gradle 主要的不同点在于，新结构有明确的分隔区分资源包（main, androidTest），这是来自Gradle的概念。你可以这样理解，添加一个"paid"跟"free"的资源包在src里，这样你的app就有了paid跟free两种风格了。拥有一个顶级的应用程序从其他库项目区分你的应用程序是非常有用的(如library-foobar)，那是引用自你的App。settings.gradle可以保持这些项目库的引用，app/build.gradle也能引用。Gradle的配置一般的结构。请看Google为Android写的Gradle指导。一个小任务。你可以在Gradle里创建一个任务来替代（shell, Python, Perl之类）的脚本。查看更多的内容，请看Gradle的文档。密码。在你App的build.gradle里，你在发布时要定义签名配置，以下的作法你应当要避免：不要下面这样做，要不然这个会被…