開發工具首選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。