开发工具首选Android studio ,其做为Google官方指定的Android开发工具,其发展已经有了很长一段时间,目前已经成为了Android特定的开发工具。
2.App设计风格git
这一点对于一个开发者来讲,貌似没有决定权,最终的决定权在产品部门手里。尽管这样,我仍是会尽力说服产品部门将App设计成MaterialDesign风格。这一点说多了都是泪啊,做为一个Android开发者,却成天开发着iOS风格的App,相信不少公司都这样,为了节省成本和时间,Android和iOS共用一套UI。举一个最多见的例子,AndroidApp中每一个页面TitleBar的左上角放一个返回按钮,这在iOS里是必须的,但Android有返回键啊,这样设计对于Android彻底是画蛇添足。真心但愿产品设计者尊重每种操做系统的风格及使用习惯,不要再设计不三不四的产品。MaterialDesign正好提供了一种这样的规范,自MD规范发布以来,其优雅的设计和清新的风格已吸引了大批设计者和开发者,现在MD设计不止在Android上(已有官方类库支持MD风格),甚至在CSS、HTML、JavaScript网页设计上都愈来愈火。所以,对于App的设计风格,MaterialDesign当仁不让,也许你曾经错过了AndroidDesign,请不要再错过Material Design。
3.版本支持
对于Android要支持的最低版本,能够参考各个版本的市场占有率,其实最靠谱的是根据自家App的统计数据来决定,目前咱们的App最低支持4.4。以我的观点认为,虽然4.x的版本仍然有一部分用户,但其实手机更新换代特别快,为了更好的用户体验,也为了应用更新的API(不少第三方库也都有版本要求),应该提升最低支持的版本,大概3.0为宜,即API Level为11。
4.App框架设计
相信你们都有体会,随着功能模块的增长,App愈来愈大,若是没有良好的架构设计,则代码将会变得臃肿且不易维护,各功能模块的耦合度会愈来愈高。所以能够把App模块化,将一个完整的App划分红几个相对独立的模块,这样便可以下降模块间的耦合也利于复用。github
1.网络模块
已经不多有单机版的App了吧,大部分都须要联网,从服务器请求数据,所以网络模模块必不可少。GitHub上的开源网络框架也特别多,我的认为可使用开源框架,目前我会选okHttp或者Volley,也许之后会有更好的网络框架出现。注意若是使用开源框架,则必需要阅读其源码,必须可以驾驭它,这样就不至于当bug出现时一筹莫展。固然还能够本身写网络模块,目前咱们的App网络模块就彻底是本身写的,这样的好处是本身熟悉所写的代码,当有bug时能够迅速定位问题,同时注意处理一些联网过程当中的细节,如:web
(1)对HTTPS的支持、HTTPS证书的验证(目前不少作法都是默认容许全部HTTPS证书的,其实这样作是不安全的,应当真正地作证书校验)算法
(2)支持Wap方式上网,移动、联通、电信代理的设置设计模式
(3)支持重定向、数据压缩传输等api
(4)其余值得注意的问题缓存
本身写网络框架能够完美地处理这些细节,但时间成本比较大。若是使用开源框架,通常都没有处理这些细节,所以咱们能够在第三方框架上作些修改,这样时间成本将会节省不少。在这里我给你们推荐几个比较流行的网络库:
okgo:OkGo - OkHttpUtils-2.0.0升级后更名 OkGo,全新完美支持RxJava安全
项目地址:https://github.com/jeasonlzy服务器
该库是封装了okhttp的网络框架,能够与RxJava完美结合,比Retrofit更简单易用。支持大文件上传下载,上传进度回调,下载进度回调,表单上传(多文件和多参数一块儿上传),链式调用,能够自定义返回对象,支持Https和自签名证书,支持cookie自动管理,支持四种缓存模式缓存网络数据,支持30一、302重定向,扩展了统一的上传管理和下载管理功能
retrofit:Retrofit 是 Square 公司出品的默认基于 OkHttp 封装的一套 RESTful 网络请求框架,不了解 RESTful 概念的不妨去搜索学习下,RESTful 能够说是目前流行的一套 api 设计的风格,并非标准。Retrofit 的封装能够说是很强大,里面涉及到一堆的设计模式,你能够经过注解直接配置请求,你可使用不一样的 http 客户端,虽然默认是用 http ,可使用不一样 Json Converter 来序列化数据,同时提供对 RxJava 的支持,使用 Retrofit + OkHttp + RxJava + Dagger2 能够说是目前比较潮的一套框架,可是须要有比较高的门槛。websocket
Retrofit 的具体使用方法与地址在这里:
http://square.github.io/retrofit/
Volley:Volley 是 Google 官方出的一套小而巧的异步请求库,该框架封装的扩展性很强,支持 HttpClient、HttpUrlConnection,甚至支持 OkHttp,具体方法能够看 Jake 大神的这个 Gist 文件:
https://gist.github.com/JakeWharton/5616899
并且 Volley 里面也封装了 ImageLoader ,因此若是你愿意你甚至不须要使用图片加载框架,不过这块功能没有一些专门的图片加载框架强大,对于简单的需求可使用,对于稍复杂点的需求仍是须要用到专门的图片加载框架。
Volley 也有缺陷,好比不支持 post 大数据,因此不适合上传文件。不过 Volley 设计的初衷自己也就是为频繁的、数据量小的网络请求而生!
关于 Volley 的具体用法能够见我很早在 GitHub 的一个 demo :
https://github.com/stormzhang/AndroidVolley
OkHttp: OkHttp 是 Square 公司开源的针对 Java 和 Android 程序,封装的一个高性能 http 请求库,因此它的职责跟 HttpUrlConnection 是同样的,支持 spdy、http 2.0、websocket ,支持同步、异步,并且 OkHttp 又封装了线程池,封装了数据转换,封装了参数使用、错误处理等,api 使用起来更加方便。能够把它理解成是一个封装以后的相似 HttpUrlConnection 的一个东西,可是你在使用的时候仍然须要本身再作一层封装,这样才能像使用一个框架同样更加顺手。
OkHttp 的具体使用方法这里就不赘述,地址在这里:
http://square.github.io/okhttp/
在APP的开发过程当中,图片是APP 不可或缺的元素,并且图片是占用内存的大户,所以图片管理框架特别重要,很差的图片框架容易引发内存泄露甚至致使崩溃。固然能够本身实现图片框架(目前咱们也是这样作的),实现图片的下载、解码、缓存等关键环节。我的建议能够采用一些比较好的图片库,也许会比咱们本身管理图片更完善和高效。我会推荐以下几个图片管理库:
(1)Glide,Google的一些官方App,如Googlephotos都使用了,还要解释更多吗?
(2)Fresco,FaceBook的开源库,功能超级强大,支持WebP、Gif、JPEG渐进显示,关键是其对图片内存的设计思想,使得图片内存开销大大减小。
(3)Android-Universal-Image-Loader,在出现上述图片库以前,貌似这个最火吧,以前我的的App中也用了它。
(4)Picasso,Square的开源库,听说Glide就是参考Picasso设计的。
对于APP 的设计模式我的采用MVVM或者MVP模式进行设计。
10.App的安全性考虑
AndroidApp的安全问题不多有人重视,但这的确是一个很严重的问题,一些好的App常常被人破解。建议将一些核心算法等写成.so库,重要的逻辑放在服务器端,数据请求采用加密等,另外打包APK时至少要混淆代码,还能够采用APK加壳机制,总之这类的防范措施永远不嫌多。
一口气漫无逻辑地写了这么多,可能会有遗漏的内容,后续会补充完善。我想若是按照上述原则,至少能够开发出一款不错的App。