Android 開發一般都使用什麼框架?

除遊戲之外,一般 Android 開發大家都使用什麼框架?


比如 PHP 用 thinkPHP 或者 Laravel;Java 用 Spring IOC、Spring MVC / Struts2、Mybatis / Hibernate;.net 方面一般用 Microsoft Enterprise Library……上面這樣的技術選型基本都是標配了。


### 開源框架推薦
#### 網路
* [okhttp](square/okhttp · GitHub)
* [android-async-http](loopj/android-async-http · GitHub)

#### 事件匯流排
* [otto](square/otto · GitHub)
* [EventBus](greenrobot/EventBus · GitHub)

#### 依賴注入
* [Dagger](square/dagger · GitHub)
* [RoboGuice](roboguice/roboguice · GitHub)
* [ButterKnife](JakeWharton/butterknife · GitHub)

#### 圖片
* [Fresco](facebook/fresco · GitHub)
* [Glide](bumptech/glide · GitHub)
* [picasso](square/picasso · GitHub)

#### 資料庫
* [greenDao](greenrobot/greenDAO · GitHub)
* [ormlite](j256/ormlite-android · GitHub)
* [LitePal](LitePalFramework/LitePal · GitHub)

#### 響應式編程
* [RxJava](ReactiveX/RxJava · GitHub)
* [RxAndroid](ReactiveX/RxAndroid: RxJava bindings for An...)

#### 日誌輸出
* [logger](orhanobut/logger: Simple, pretty and powerf...)
* [android-CLog](liaohuqiu/android-CLog)
* [KLog](ZhaoKaiQiang/KLog · GitHub)
* [LogUtils](pengwei1024/LogUtils · GitHub)

#### 崩潰統計平台
* [騰訊bugly](騰訊Bugly - Android Crash(崩潰)_iOS Crash(崩潰)_ANR_卡頓)
* [Crittercism](Crittercism - Developer Home)
* [Crashlytics](The most powerful, yet lightest weight crash reporting solution for iOS and Android developers.)

### 架構設計
這個肯定得了解下MVC,MVP,MVVM還有設計模式這些,這裡有幾個開源項目推薦下

##### philm
Movie collection and information app for Android.
Github地址:chrisbanes/philm: Movie collection and info...

##### SimpleNews
基於Material Design和MVP的新聞客戶端
Github地址:GitHub - liuling07/SimpleNews: 基於Material Design和MVP的新聞客戶端

##### GankDaily
A application show technical information every working days, use MVP pattern.
Github地址:maoruibin/GankDaily

#####SimplifyReader
Github地址:GitHub - SkillCollege/SimplifyReader: 一款基於Google Material Design設計開發的Android客戶端,包括新聞簡讀,圖片瀏覽,視頻爽看 ,音樂輕聽以及二維碼掃描五個子模塊。項目採取的是MVP架構開發,由於還是摸索階段,可能不是很規範。但基本上應該是這麼個套路,至少我個人認為是這樣的~恩,就是這樣的!

##### NBAPlus
Github地址:SilenceDut/NBAPlus · GitHub

##### PhotoNoter
Github地址:yydcdut/PhotoNoter

##### Meizhi
Github地址:drakeet/Meizhi: gank.io unofficial client, RxJava Retrofit

### 其他
##### leakcanary
檢查內存泄露
Github地址:GitHub - square/leakcanary: A memory leak detection library for Android and Java.

#####DebugDrawer
Android Debug Drawer for faster development
Github地址:palaima/DebugDrawer · GitHub

##### ViewServer
Local server for Android"s HierarchyViewer
Github地址:romainguy/ViewServer · GitHub

##### AndroidWiFiADB
IntelliJ/AndroidStudio plugin which provides a button to connect your Android device over WiFi to install, run and debug your applications without a USB connected.
Github地址:https://github.com/pedrovgs/AndroidWiFiADB

####PS:開源框架雖然好用,但最好要了解框架存在的一些bug和坑,遇到問題可以給作者提issue,一般這些有名的框架,作者都會很積極的回答。推薦下自己的[Android-Dev-Favorites](GitHub - ruijun/Android-Dev-Favorites: The repository is Android development favorites, It used to collect the knowledge of Android Development.),裡面收集了Android開發的乾貨,希望能幫到題主。


推薦 star 一下 Github 上的 Awesome 系列之 Android 輪子大全 JStumpp/awesome-android · GitHub

版本兼容:官方 support 全家桶
網路請求:Retrofit、OkHttp、Volley、AsyncHttp
事件匯流排:Otto、EventBus
依賴注入:Dagger2
圖片載入:Fresco、Glide
響應式:RxAndroid(RxJava)
Java8:Retrolambda、Lightweight-Stream-API
控制項注入和事件綁定:Butterknife(配合 ButterKnife Zelezny 有奇效)
快速開發合集:Afinal、xUtils、Android Annotations

另推薦關注……
公司:Google · GitHub(廢話),Square · GitHub,Facebook · GitHub,Netflix, Inc. · GitHub
人:JakeWharton (Jake Wharton) · GitHub (廢話)

對於什麼是框架評論和其他答案有一些爭論,我自己也比較迷糊。百度百科和互動百科裡有這麼一段話:

框架(Framework)是整個或部分系統的可重用設計,表現為一組抽象構件及構件實例間交互的方法;另一種定義認為,框架是可被應用開發者定製的應用骨架。前者是從應用方面而後者是從目的方面給出的定義。

按照後者的標準,Android 上應該沒什麼框架了,它本身提供的應用開發環境就算是一個框架;而從前者角度上講,上述類庫也算是廣義的框架吧。


我的理解是,Android開發並沒有什麼通用框架,應用框架完全是從業務中提取出來的。Architecture is About Intent, not Frameworks這句話表達的應該也是這個意思。頂多給你一個思維,但是抱歉,沒有通用框架這種鬼。

所以說,框架沒有,庫的話RxJava EventBus Glide等肯定會用的,戒不掉了


現在做Android開發,已經是大好時機,網上有很多成熟的框架,我們應充分利用好這些,所謂前人種樹後人好乘涼,很多時候壓根不需要了解太多原理,只需站在巨人的丁丁上即可,當然您說您能力強,非要重複造輪子,無可厚非。

MVP模式

MVP簡介

Android MVP Sample,MVP+Retrofit+RxJava實踐小結

github地址

https://github.com/WuXiaolong/AndroidMVPSample

相關博客

Android MVP+Retrofit+RxJava實踐小結
Android MVP 實例

依賴注入butterknife

簡介

Bind Android views and callbacks to fields and methods 將Android視圖和回調方法綁定到欄位和方法上

github地址

GitHub - JakeWharton/butterknife: Bind Android views and callbacks to fields and methods.

相關博客

butterknife官網

網路請求Retrofit

簡介

Type-safe HTTP client for Android and Java by Square 類型安全的Http客戶端

github地址

GitHub - square/retrofit: Type-safe HTTP client for Android and Java by Square, Inc.

相關博客

Android Retrofit 2.0 使用-補充篇
Android Retrofit 2.0使用
Retrofit官網

圖片載入glide

簡介

An image loading and caching library for Android focused on smooth scrolling 一個圖片載入和緩存的庫

github地址

GitHub - bumptech/glide: An image loading and caching library for Android focused on smooth scrolling

picasso

簡介

A powerful image downloading and caching library for Android 一個強大的圖片下載與緩存的庫

github地址

GitHub - square/picasso: A powerful image downloading and caching library for Android

相關博客

Glide 系列預覽
開始!
載入進階
ListAdapter(ListView, GridView)/)
佔位符 和 漸現動畫
圖片重設大小 和 縮放
顯示 Gif 和 Video
緩存基礎
請求優先順序
縮略圖
回調:SimpleTarget 和 ViewTarget 用於自定義視圖類
載入圖片到通知欄和應用小部件中
異常:調試和錯誤處理
自定義轉換
用 animate() 自定義動畫
集成網路棧
用 Module 自定義 Glide
Module 實例:接受自簽名證書的 HTTPS
Module 實例:自定義緩存
Module 實例:用自定義尺寸優化載入的圖片
動態使用 Model Loader
如何旋轉圖像
系列綜述

Picasso
github之Picasso使用

圖片操作PhotoView

簡介

Implementation of ImageView for Android that supports zooming, by various touch gestures 圖片縮放

github地址

GitHub - chrisbanes/PhotoView: Implementation of ImageView for Android that supports zooming, by various touch gestures.

相關博客

github之PhotoView使用

uCrop

簡介

Image Cropping Library for Android 圖片裁剪

github地址

GitHub - Yalantis/uCrop: Image Cropping Library for Android

相關博客

uCrop使用及源碼淺析

CircleImageView

簡介

A circular ImageView for Android 圓頭像

github地址

GitHub - hdodenhof/CircleImageView: A circular ImageView for Android

資料庫Realm

簡介

Realm is a mobile database: a replacement for SQLite ORMs

github地址

GitHub - realm/realm-java: Realm is a mobile database: a replacement for SQLite ORMs

相關博客

Realm官網

響應式編程RxJava

簡介

RxJava – Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM

github地址

https://github.com/ReactiveX/RxJava

相關博客

RxJava
RxJava Essentials CN
ReactiveX文檔中文翻譯
給 Android 開發者的 RxJava 詳解

事件匯流排RxBus簡介

基於RxJava寫的事件匯流排

相關博客

RxBus

下拉刷新PullLoadMoreRecyclerView

簡介

實現RecyclerView下拉刷新和上拉載入更多以及RecyclerView線性、網格、瀑布流效果演示。適用於只需要簡單地實現下拉刷新和上拉載入效果。

github地址

GitHub - WuXiaolong/PullLoadMoreRecyclerView: 實現RecyclerView下拉刷新和上拉載入更多以及RecyclerView線性、網格、瀑布流效果演示

相關博客

PullLoadMoreRecyclerView

最後

知道了解以上開源框架,開發又何憂!我總結的可能還不夠全,如果您覺得實際項目中還有必用到的庫,歡迎留言哈。

本文原創發佈於微信公眾號「吳小龍同學」,不止於技術分享,不取悅別人,寫給懂的人看~

http://weixin.qq.com/r/PjhNVUzEvxHArQg2920s (二維碼自動識別)


問的是框架, 回答的都是庫。

Architecture is About Intent, not Frameworks

框架的話, 用官方的吧

https://www.youtube.com/watch?v=BlkJzgjzL0clist=PLWz5rJ2EKKc_Tt7q77qwyKRgytF1RzRx8index=2(Android Application Architecture (Android Dev Summit 2015))

框架並不能提升開發效率, 但是能提升代碼的維護性。
因為框架會進行解耦和隔離,副作用就是代碼會很繞。


update:知乎3.3也增加了開源許可,在設置-&>開源許可可以看到知乎app使用的開源項目。

現在RxAndroid、gson、OkHttp這些都成了標配了,可以看看這些用戶量比較多的app的開源許可,比如Uber:

豆瓣:

酷市場:

為知筆記:

反正人家都用了咱還有什麼糾結的( ̄? ̄)


Android上面的開源庫太多了,網路請求類的volley、okhttp;資料庫類的ormlite、greendao;事件匯流排eventbus;圖片請求ImageLoader、Fresco、Picasso;當然還有國內的afinal、xutils等等。這些還沒有包括一些常用的開源自定義控制項、開源自定義動畫等等,所有你希望使用的開源組建都能夠在github上搜索得到。

說實話,如果你剛開始從j2ee轉向成為Android開發的話,建議什麼框架都不要用,用系統原生提供的API進行開發最後,這樣最容易幫助你更詳細的理解整個Android系統的架構與特性。所來說去,又回到我們學習最初學習Android時候的那張圖表,如下所示,android的五個層級:

對於Android初學者來說,學習學習四大組建,研究研究ActivityManager、PackageManager,不使用開源的控制項嘗試嘗試使用Canvas或者OpenGL自繪,閱讀一下Dalvik的源碼了解了解ClassLoader與內存回收,看看整個Android的核心架構Binder,直接使用Android提供給你的HttpClient、HttpConnection網路請求庫,自己動手寫寫SQL語句查詢。

這些工作看似瑣碎,如果真的希望學好Android的開發,特別是對於初學者來說,這些是很有必要的,它能夠幫助你更詳細的理解一個系統的架構與應用程序的運行方式。而很多人從事了多年的Android開發都是在Application層上打交道,原本可研究的技術含量並不多,加之又被開源的各種框架所綁架,讓自己的技術晉陞能力進步收到的局限。

如果j2ee一樣,我們雖然都在討論SSH,但是我們還是會學習學習Servlet、JSP等。對於android一樣,框架層出不窮,每年Google IO大會基本都會推出新的框架、加之flag、bat每天也都會開源出來自己的新的框架/控制項,如果沒有對android系統整體的了解與實踐,掌握的框架開發技術就想似空中樓閣,隨時有崩塌的危險。


說說我現在用的框架
網路請求:Android-Async-Http
圖片載入:Glide 和 Universal-Image-Loader
匯流排:EventBus
JSON 解析:FastJSON
View 註解:ButterKnife
各種各樣的彈窗:DialogPlus
代替 Toast 的消息提示:AppMsg
資料庫ORM:ActiveAndroid
Log:Logger


框架是為業務服務的,如果有什麼通用的好框架的話GOOGLE會吸收到aosp裡面去。


確實太多了。而且各不相同。

比較普遍的,image-loader算一個。eventbus現在也可以算標配了。Vollery,OkHttp這類就更常見了。
xutils也更新到了3版本。
高級一點的rxjava,但就比較有門檻了。

android自己推的databinding算不?7月份出的,現在用的少,但以後估計也會成為基本了。


目前還沒有發現比較好用通用的第三方框架,原生的android framework就足夠了,選幾個好用的庫和模式(MVC或者MVP或者MVVM),自己根據產品和團隊的具體需求設計封裝一下還方便。


資料庫GreenDao,網路請求Vollery,OkHttp等,圖片載入ImageLoader,picasso,還有xUtils,AFinal這種集成了各種功能的框架,說實話,Android的第三方庫還是挺多的,比如網路請求,你用原生的寫,代碼量暫且不論,就那請求隊列你都要自己去實現,總不能一次性無限制發送多個請求吧


常用的框架就不多提了,註解框架我推薦 Annotation。 還有一個圖片框架photoview展示效果不錯縮放滑動等特效,不過網路載入那一方面肯定沒得 image loader那些叼就是了。畢竟功能性質貌似不一樣


說到框架,我覺得還是要打一下廣告的,https://github.com/neevek/Paginize


沒啥框架啊,感覺安卓本來就很簡單,加了一些框架反倒會增加代碼量,原生態就挺好,有時會加入一些imageLoader這種開源框架,不過不會影響整個APP的結構。我也是新手,如說得不對請指正


什麼都不用。。。如果要顯示大量圖片,選一個非同步圖片載入框架就行了。。。其實自己隨便寫寫就行了,軟引用,RLU cache,sdcard緩存。。。
不用框架的原因是,不是每個人都用過,也不知道裡面有坑怎麼填,一個新員工要維護代碼還得掌握好幾個框架,開發成本太大了


MVP、MVC是設計模式吧...和框架沒什麼關係吧,安卓的框架分得比較細,可能載入網路圖片是一個,網路請求又是一個,主要還是看自己的需求來選擇最適合的吧...


GitHub - ZQiang94/Andriod-collect-blogs: 收集Android相關blog


以下是我開發的一款APP(西瓜理財)所用到的一些開源庫
原文地址:西瓜理財APP用到的開源庫和工具整理
Android studio 插件

1、Android ButterKnife Zelezny
這是著名的Jake Wharton黃油刀插件,用過的都說好,連註解都不用親自寫了,效率直線提升。
2、GsonFormat
這個插件可以將mobileapi返回的json數據直接轉換為實體類,省去了我們寫一大堆的欄位屬性和Getter、Setter方法所花費的時間。
3、Android Parcelable code generator
大家如果用到Parcelable來序列化實體類的話,將會面臨比Serializable複雜的多的步驟所以通過使用這個插件來幫我們一鍵生成對應的方法。另外:需要注意的是當有新的屬性加入的時候記得重新生成一次不然會出現序列化錯誤。
4、.ignore
這個是配合Git控制來忽略一些本地配置文件和不需要同步的代碼文件。
5、Genymotion
這個就不必多說了,用過的都說好。

西瓜理財APP用到的開源庫和工具整理第三方庫

1、Nuwa
最近議論最多的熱修復框架,這只是其中一種實現方案。
2、Umeng
用來做APP統計分析的平台,不過建議大家以後可以考慮阿里最近推出的移動應用數據分析平台。
3、諸葛IO
一款精細化數據分析的工具,重點在移動用戶行為分析不過由於後期數據激增開始收費了所以放棄了。
4、Cobub Razor
號稱私有版的友盟,因為考慮到友盟統計的數據不太能真實反映用戶情況,所以我們決定搭建一套自己的數據採集分析系統但考慮到時間成本所以採用了這個開源項目,省去了設計各種上傳策略的時間。
5、極光推送
這個要說一點的是注意官網的各種cpu架構下的so文件更新,一定要全都加入工程不然會在個別機型上報本地庫載入異常的錯誤。
6、Fresco
這個是Facebook最近推出的一款圖片載入框架,對OOM的問題做了特殊優化。
7、sharesdk
第三方分享首選
8、ButterKnife
都說程序員都是比較懶的,什麼事情都想著讓程序自動化幫忙減輕工作量,這個開源庫可以讓我們從大量的findViewById()和setonclicktListener()解放出來,最令人興奮的是其對性能的影響微乎其微!
9、Gson
谷歌GSON這個Java類庫可以把Java對象轉換成JSON,也可以把JSON字元串轉換成一個相等的Java對象。Gson支持任意複雜Java對象包括沒有源代碼的對象。
10、EventBus
在編程過程中,當我們想通知其他組件某些事情發生時,我們通常使用觀察者模式,正是因為觀察者模式非常常見,所以在jdk1.5中已經幫助我們實現了觀察者模式,我們只需要簡單的繼承一些類就可以快速使用觀察者模式,在Android中也有一個類似功能的開源庫EventBus,可以很方便的幫助我們實現觀察者模式,另外注意:EventBus有好幾款開源庫,github上有人專門做過對比各個庫的優缺點大家可以參考。
11、Netroid
Netroid是一個基於Volley實現的Android Http庫,提供執行網路請求、緩存返回結果、批量圖片載入、大文件斷點下載的常見Http交互功能,致力於避免每個項目重複開發基礎Http功能,實現顯著地縮短開發周期的願景。
12、騰訊X5瀏覽內核
騰訊X5瀏覽服務由QQ瀏覽器團隊出品,致力於優化移動端webview體驗的整套解決方案,使用QQ瀏覽器X5內核SDK和X5雲端服務,解決移動端webview使用過程中出現的一切問題,優化用戶的瀏覽體驗,同時騰訊還將持續提供後續的更新和優化,為開發者提供最新最優秀的功能和服務。

西瓜理財APP用到的開源庫和工具整理其他開發工具

1、蒲公英
其實這種應用內側分發的平台很多,之所以選蒲公英是因為他有mac版的客戶端上傳比較方便,而且還有對於的gradle代碼用來實現自動化打包發布。
2、Charles
這個是一款功能比較強大的抓包工具,在跟mobileapi對接和測試中非常高效。
3、LeakCanary
強烈推薦,幫助你在開發階段方便的檢測出內存泄露的問題,使用起來更簡單方便。
4、Logger
讓開發調試效率提高至少300%而且心情愉悅的Log神器。

FullStackEngineer的公眾號,更多分享


針對某評論,我就想不通,為什麼都很多現成的框架為什麼要用原生,什麼都自己碼就很有成就感?主流框架都是經過大家千錘百鍊測試出來的,一來可以降低成本,二來可以避免不必要的錯誤,為什麼不用呢。


推薦閱讀:

魅族MX4的android 5.0(棒棒糖)進展如何?
如何評價魅族公布的 Flyme 4.0 UI 截圖?
三星 Note7和iphone 7 plus的哪些差距會讓你選擇Note7?
你對即將發布的魅族MX4有什麼期待?
如何評價2016年的千元機?

TAG:移動互聯網 | 軟體開發 | Android開發 | Java | Android |