Android开发技术文档.docx
《Android开发技术文档.docx》由会员分享,可在线阅读,更多相关《Android开发技术文档.docx(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Android 开发最佳实践从Futurice公司Android开发者中学到的经验。 遵循以下准则,避免重复发明轮子。若您对开发iOS或Windows Phone 有兴趣, 请看iOS Good Practices和Windows client Good Practices这两篇文章。摘要 使用 Gradle 和它推荐的工程结构 把密码和敏感数据放在gradle.properties 不要自己写 HTTP 客户端,使用Volley或OkHttp库 使用Jackson库解析JSON数据 避免使用Guava同时使用一些类库来避免65k method limit(一个Android程序中最多能执行6
2、5536个方法) 使用 Fragments来呈现UI视图 使用 Activities 只是为了管理 Fragments Layout 布局是 XMLs代码,组织好它们 在layoutout XMLs布局时,使用styles文件来避免使用重复的属性 使用多个style文件来避免单一的一个大style文件 保持你的colors.xml 简短DRY(不要重复自己),只是定义调色板 总是使用dimens.xml DRY(不要重复自己),定义通用常数 不要做一个深层次的ViewGroup 在使用WebViews时避免在客户端做处理,当心内存泄露 使用Robolectric单元测试,Robotium 做U
3、I测试 使用Genymotion 作为你的模拟器 总是使用ProGuard 和 DexGuard混淆来项目Android SDK将你的Android SDK放在你的home目录或其他应用程序无关的位置。 当安装有些包含SDK的IDE的时候,可能会将SDK放在IDE同一目录下,当你需要升级(或重新安装)IDE或更换的IDE时,会非常麻烦。 此外,若果你的IDE是在普通用户,不是在root下运行,还要避免吧SDK放到一下需要sudo权限的系统级别目录下。构建系统你的默认编译环境应该是Gradle. Ant 有很多限制,也很冗余。使用Gradle,完成以下工作很方便: 构建APP不同版本的变种 制作
4、简单类似脚本的任务 管理和下载依赖 自定义秘钥 更多同时,Android Gradle插件作为新标准的构建系统正在被Google积极的开发。工程结构有两种流行的结构:老的Ant & Eclipse ADT 工程结构,和新的Gradle & Android Studio 工程结构, 你应该选择新的工程结构,如果你的工程还在使用老的结构,考虑放弃吧,将工程移植到新的结构。老的结构:old-structure assets libs res src com/futurice/project AndroidManifest.xml build.gradle project.properties pro
5、guard-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主要的区别在于,新的结构明确的分开了source sets (main,androidTest),Gradle的一个理念。 你可以做到,例如,添加源组paid和free在s
6、rc中,这将成为您的应用程序的付费和免费的两种模式的源代码。你的项目引用第三方项目库时(例如,library-foobar),拥有一个顶级包名app从第三方库项目区分你的应用程序是非常有用的。 然后settings.gradle不断引用这些库项目,其中app/build.gradle可以引用。Gradle 配置常用结构参考Googles guide on Gradle for Android小任务除了(shell, Python, Perl, etc)这些脚本语言,你也可以使用Gradle 制作任务。 更多信息请参考Gradles documentation。密码在做版本release时你ap
7、p的build.gradle你需要定义signingConfigs.此时你应该避免以下内容:不要做这个. 这会出现在版本控制中。signingConfigs release storeFile file(myapp.keystore) storePassword password123 keyAlias thekey keyPassword password789 而是,建立一个不加入版本控制系统的gradle.properties文件。KEYSTORE_PASSWORD=password123KEY_PASSWORD=password789那个文件是gradle自动引入的,你可以在buld.
8、gradle文件中使用,例如:signingConfigs release try storeFile file(myapp.keystore) storePassword KEYSTORE_PASSWORD keyAlias thekey keyPassword KEY_PASSWORD catch (ex) throw new InvalidUserDataException(You should define KEYSTORE_PASSWORD and KEY_PASSWORD in gradle.properties.) 使用 Maven 依赖方案代替使用导入jar包方案如果在你的项目
9、中你明确使用率 jar文件,那么它们可能成为永久的版本,如2.1.1.下载jar包更新他们是很繁琐的, 这个问题Maven很好的解决了,这在Android Gradle构建中也是推荐的方法。你可 以指定版本的一个范围,如2.1.+,然后Maven会自动升级到制定的最新版本,例如:dependencies compile flix.rxjava:rxjava-core:0.19.+ compile flix.rxjava:rxjava-android:0.19.+ compile com.fasterxml.jackson.core:jackson-databind:2.4.+ compile
10、com.fasterxml.jackson.core:jackson-core:2.4.+ compile com.fasterxml.jackson.core:jackson-annotations:2.4.+ compile com.squareup.okhttp:okhttp:2.0.+ compile com.squareup.okhttp:okhttp-urlconnection:2.0.+IDEs and text editorsIDE集成开发环境和文本编辑器无论使用什么编辑器,一定要构建一个良好的工程结构编辑器每个人都有自己的 选择,让你的编辑器根据工程结构和构建系统运作,那是你
11、自己的责任。当下首推Android Studio,因为他是由谷歌开发,最接近Gradle,默认使用最新的工程结构,已经到beta阶段 (目前已经有release 1.0了),它就是为Android开发定制的。你也可以使用Eclipse ADT,但是你需要对它进行配置,因为它使用了旧的工程结构 和Ant作为构建系统。你甚至可以使用纯文版编辑器如Vim,Sublime Text,或者Emacs。如果那样的话,你需要使用Gardle和adb命令行。如果使用Eclipse集成Gradle 不适合你,你只是使用命令行构建工程,或迁移到Android Studio中来吧。无论你使用何种开发工具,只要确保G
12、radle和新的项目结构保持官方的方式构建应用程序,避免你的编辑器配置文件加入到版本控制。例如,避免加入Antbuild.xml文件。 特别如果你改变Ant的配置,不要忘记保持build.gradle是最新和起作用的。同时,善待其他开发者,不要强制改变他们的开发工具和偏好。类库Jackson是一个将java对象转换成JSON与JSON转化java类的类库。Gson是解决这个问题的流行方案,然而我们发现Jackson更高效,因为它支持替代的方法处理JSON:流、内存树模型,和传统JSON-POJO数据绑定。不过,请记住, Jsonkson库比起GSON更大,所以根据你的情况选择,你可能选择GSO
13、N来避免APP 65k个方法限制。其它选择:Json-smartandBoon JSON网络请求,缓存,图片执行请求后端服务器,有几种交互的解决方案,你应该考虑实现你自己的网络客户端。使用Volley或Retrofit。Volley 同时提供图片缓存类。若果你选择使用Retrofit,那么考虑使用Picasso来加载图片和缓存,同时使用OkHttp作为高效的网络请求。Retrofit,Picasso和OkHttp都是有同一家公司开发(注: 是由Square公司开发),所以它们能很好的在一起运行。OkHttp 同样可以和Volley在一起使用 Volley.RxJava是函数式反应性的一个类库,
14、换句话说,能处理异步的事件。 这是一个强大的和有前途的模式,同时也可能会造成混淆,因为它是如此的不同。 我们建议在使用这个库架构整个应用程序之前要谨慎考虑。 有一些项目是使用RxJava完成的,如果你需要帮助可以跟这些人取得联系: Timo Tuominen, Olli Salonen, Andre Medeiros, Mark Voit, Antti Lammi, Vera Izrailit, Juha Ristolainen. 我们也写了一些博客:1,2,3,4.如若你之前有使用过Rx的经历,开始从API响应应用它。 另外,从简单的UI事件处理开始运用,如单击事件或在搜索栏输入事件。 若对
15、你的Rx技术有信心,同时想要将它应用到你的整体架构中,那么请在复杂的部分写好Javadocs文档。 请记住其他不熟悉RxJava的开发人员,可能会非常难理解整个项目。 尽你的的全力帮助他们理解你的代码和Rx。Retrolambda是一个在Android和预JDK8平台上的使用Lambda表达式语法的Java类库。 它有助于保持你代码的紧凑性和可读性,特别当你使用如RxJava函数风格编程时。 使用它时先安装JDK8,在Android Studio工程结构对话框中把它设置成为SDK路径,同时设置JAVA8_HOME和JAVA7_HOME环境变量, 然后在工程根目录下配置 build.gradle
16、:dependencies classpath me.tatarka:gradle-retrolambda:2.4.+同时在每个module 的build.gradle中添加apply plugin: retrolambdaandroid compileOptions sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8retrolambda jdk System.getenv(JAVA8_HOME) oldJdk System.getenv(JAVA7_HOME) jav
17、aVersion JavaVersion.VERSION_1_7Android Studio 提供Java8 lambdas表带是代码提示支持。如果你对lambdas不熟悉,只需参照以下开始学习吧: 任何只包含一个接口的方法都是lambda friendly同时代码可以被折叠成更紧凑的语法 如果对参数或类似有疑问,就写一个普通的匿名内部类,然后让Android Status为你生成一个lambda。当心dex方法数限制,同时避免使用过多的类库Android apps,当打包成一个dex文件时,有一个65535个应用方法强硬限制123。 当你突破65k限制之后你会看到一个致命错误。因此,使用一个
18、正常范围的类库文件,同时使用dex-method-counts工具来决定哪些类库可以再65k限制之下使用,特别的避免使用Guava类库,因为它包含超过13k个方法。Activities and FragmentsFragments应该作为你实现UI界面默认选择。你可以重复使用Fragments用户接口来 组合成你的应用。我们强烈推荐使用Fragments而不是activity来呈现UI界面,理由如下: 提供多窗格布局解决方案Fragments 的引入主要将手机应用延伸到平板电脑,所以在平板电脑上你可能有A、B两个窗格,但是在手机应用上A、B可能分别充满 整个屏幕。如果你的应用在最初就使用了fr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 开发 技术 文档
限制150内