Android 開發有哪些新技術出現?

可以從UI設計或者一些核心的演算法之類的說起


第一次在知乎回答問題,感覺有些戰戰兢兢,在大神雲集的地方,生怕有些東西說錯,讓大家笑話。

題主提的這個問題,相信很多開發者都有自己的話要說。Android 的發展確實太快了,每年的都有很多新東西出現,想要覆蓋所有新東西感覺也不太可能,我這裡主要說一下主要的 Android 的主要新技術發展,其實了解 Android 的發展趨勢,可能對開發者更有幫助。

開發工具

  1. Android Studio: Google 官方放棄 Eclipse 和 Android Studio 普及。AS 雖然不算新,但是對 Android Studio 這個軟體的更新速度快的驚人,有大量的新功能發布。例如支持很多註解代碼提示註解、Live code template、支持自動生成 Parcelable 實現等等,作為開發者,持續關注這個更新列表 Recent Changes ,一定會讓你的寫代碼的生活更加美好。

編程「語言」

  1. Kotlin: 作為 Android 領域的 Swift,絕對讓你如沐新風。拋棄沉重的 Java 語法,Kotlin 融入了很多現代編程語言的思想,作為開發者,接受新的語言,了解新語言的發展趨勢,更有利於開闊你的思路和加深對語言的理解。在 Android 開發上,使用 Kotlin 並不會讓你付出什麼代價,為什麼不來試試? 使用Kotlin進行Android開發。
  2. React Native: 跨平台一直是程序員的夢想,而且移動應用的跨平台解決方案也很多,因為 Facebook 的參與和力推,讓這個解決方案帶上了光環。第一個用 React Native 開發的 App 已經在 Google Play 上架 Facebook 廣告管理工具,聽說 Android 的 SDK 也馬上會到來,React Native。
  3. Sky: 與 React Native 類似,使用 Web 開發語言來做移動平台的開發,雖然這個只是一個嘗試,但是這是 Google 自身推出的,特別是在 Java 語言的使用上敗訴之後,這可能會有一些作為呢,domokit/sky_sdk · GitHub

開發模式

  1. Dagger 2:依賴注入並不是什麼新技術,但是使用在 Android 確實一個新的嘗試。Android App 越來越被當成嚴肅的大型項目來構建,很多在以前大型伺服器開發上使用的技術都被應用到了移動開發。Android 開發分模塊開發,使用 Dagger 來松耦合模塊。特別值得一體的是,Dagger 2 現在由 Google 親自接管。 Dagger ? A fast dependency injector for Android and Java.
  2. MVP:因為 Android 並沒有嚴格的業務和界面區分,項目一複雜,就很容易使代碼陷入混亂。現在 Android 開發社區對 MVP 模式討論越來越熱,覺得 MVP 是非常適合 Android APP 開發。MVP for Android: how to organize the presentation layer
  3. RxAndroid: 函數響應式編程(Functional Reactive Programming)也不是新內容,RxAndroid 把 RxJava 帶到 Android 環境中。很多時候,編寫 Android 程序,你也可以看成是數據的處理和流動,換一種思想編程,曾經看起來很棘手的問題,瞬間就很優雅的解決了:ReactiveX/RxAndroid · GitHub
  4. MVVM :這是因為開始官方支持 DataBinding,把 MVVM 直接帶到 Android 中。數據綁定在 Windows WPF 和 Web 已經非常常見,它非常高效的開發效率,讓你只關心你的數據和業務。這也對 Android 開發來說,無疑是一個非常重大的影響:android UI設計MVVM設計模式討論? - M.A.G.I 的回答
  5. 插件化:針對大型 Android 項目,很多 App 開始使用插件來分模塊構建相對獨立的功能。
  6. Hybrid:完全使用 HTML 5 開發 App,目前還不成熟。但是折中方案在很多情況下是非常適合的,典型的就是微信,大部分信息展示都是通過 H5 來完成,同時通過 Hybird 方式,把 Web 和 Native 打通,提供給網頁訪問本地資源的能力。

UI設計

  1. Material Design:已經紅遍了大江南北,這方面的討論實在太多了,而且各種支持庫都有了,特別是 Google 官方出了一個支持庫 Android Design Support Library。
  2. Sketch 3: 這是一個專為設計移動端 UI 的設計工具,作為開發者,不用懂那麼複雜的 PS 使用,也可以做非常專業設計:https://designcode.io/sketch

說了這麼,感覺還有很多東西沒有說到,技術的發展是很快,我們可能跟不上每個細節,但是我們會發現這些新技術,很多地方都是相通的。對於開發者,能夠保持對新技術的好奇和興趣時非常難得的,參與到新技術中是技術修養,引領新技術的發展,那就是大神了。


借著回答問題正好梳理一下最近在學習的一些新東西。

Android Data Binding

Android 的 MVVM 框架。因為還處於開發階段,所以官方只出了一個簡單的教程 - Data Binding Guide。很遺憾教程中有好幾處錯誤,具體的用法可以參考 LyndonChin/MasteringAndroidDataBinding · GitHub

FLUX

Facebook 出品 - Flux | Application Architecture for Building User Interfaces 。

用於取代 MVC 模型,最大的優勢是採用了 unidirectional data flow,Facebook開源的 React 系列(React.js / React Native)都是基於此模型,新發布的 APP - Moments 也是基於 FLUX 模型,業務邏輯部分使用C++編寫,兩個平台(Android、iOS)共用了1/3 的代碼 - Flux | Application Architecture for Building User Interfaces。

Go編寫跨平台APP

與之前的Go for android 不同,這次是 Google 官方支持,源碼沒有放出,只在 Google Play 和 AppStore 發布了用 Go 寫的 APP - Ivy big number calculator

Sky

基於 Dart 的跨平台框架,國內火爆了幾天,現在看來貌似是在玩票。原理借鑒了 React Native,可以參考我之前寫的一篇博客 - Dart更近一步,Sky會一統江湖嗎?

Infer

Facebook 出品的一個代碼靜態檢測工具,背後有學術界最新的理論支撐,模擬人腦的推理過程,可以有效檢測出 Android 代碼中的 Null PointerResource Leak,關於 Annotation 有一個很好的建議:Program Safely, Annotate Nothing

Design Support Library

關於這個網上已經有很多資料了,補充幾個學習的好鏈接。

MD的資源文件 - Sticker sheets icons

實例源碼 - chrisbanes/cheesesquare · GitHub

循序漸進、非常易懂的教程 - Codelab for Android Design Support Library used in I/O Rewind Bangkok session :: The Cheese Factory

比較完整的教程 - Design Support Library

Instagram with Material Design concept is getting real (內容雖然有點老,但是乾貨很多,強烈推薦

dexposed

手淘出品的 AOP 框架,淘系 APP 的 hotpatch 就是基於這個框架,用來緊急修複線上 Bug,源碼已經開源 - alibaba/dexposed · GitHub

這些都是我最近在學習的一些東西,在大牛眼中可能不算新技,獻醜了。

歡迎關注我的 github - LyndonChin (liangfei) · GitHub,我會經常造一些輪子,star一些比較高質量的 repo。


提一下這次Google I/O新放出來的Design Support Library

Google的官方博客有詳細的介紹:Android Design Support Library

簡單來說就是增加了幾個官方的輪子,不,控制項。

1. Navigation View

2. Floating labels for editing text

3. Floating Action Button

4. Snackbar

5. TabLayout

6. CoordinatorLayout和與CoordinatorLayout配合的若干組合控制項

6.1 與Floating Action Button配合

6.2 App Bar

6.3 與ToolBars配合

只需要一句話,就可以用了:

compile "com.android.support:design:22.2.0"

更多信息可以參考:

Exploring the new Android Design Support Library

Android Design Support Library 的 代碼實驗——幾行代碼,讓你的 APP 變得花俏

Android Design Support Library

Support Library

有些需要翻牆


我來回答一個安全相關的吧

google/enjarify · GitHub

一個新的逆向工具,用於替代dex2jar

官方出品

Enjarify is designed to work in as many cases as possible, even for code where Dex2jar would fail.

據官方文檔給出的信息,他的成功率比dex2jar要高,

隱式類型轉換,長方法,異常處理等要好於dex2jar


碰巧看到這個問題,掃了一下大部分排名靠前的答案,發現有些還可以加以補全,我也來作答一發,其中有些答主已經指出的我就簡單帶過。

  • 插件化+熱修復。 評論去不少同學提到,這裡再加一票支持。關於這方面的技術開源案例也很多很多,大家可以自己搜羅。如:微信的tinker(熱修復:https://github.com/Tencent/tinker),還有前不久滴滴剛開源的VirtualApk(插件化:https://github.com/didi/VirtualAPK)。
  • Data Binding。評論區不少同學提到,這裡再加一票支持。
  • Kotlin。相比Java,Kotlin實現同樣功能的代碼量可以少到令人髮指,並且還很好的處理常見的NPE(Null Pointer Exception)問題,2017的IO大會上,Google扶正Kotlin成為官方語言,前景一片美好;關於Kotlin的詳細,可以參見我一篇舊文:走進Kotlin的世界。
  • Support Design庫。@高爺 所提到的Support Design庫例舉了很多特效,這裡再加一票,以及 @清沙 提到的Palette也是一個好東西。這裡補充一下CoordinatorLayout+BottomSheet、BottomSheetDialog這兩個,輕鬆滿足你像iOS一樣從底部彈出一個View或對話框(網上找了個圖,方便看下效果)。在實際開發中是比較實用的兩個類。

  • 嵌套滾動機制。上面點名的Support Design庫很多酷炫交互效果得以存在,全都依賴於這套機制,具體可以搜索關鍵字NestedScrolling
  • Lottie。由Airbnb開源的一套動畫框架:https://github.com/airbnb/lottie-android。不僅僅支持Android,還涵蓋了iOS、ReactNative、Web等平台,只需要UI設計者把按照Lottie的標準把效果做好,即可放到各大平台秀出酷炫的動畫,輕鬆幫你實現各種酷炫動畫效果。

  • ConstraintLayout。Google官方推出的一個約束布局,支持通過拖拽控制項就可以達到實現各種複雜布局的效果,還要一直手寫xml來布局么?還在各種Layout嵌套起來實現複雜布局么?有了ConstraintLayout來幫你,那些日子要開始一去不復返了。我在一篇舊文裡面有提到更多,感興趣的同學也可以看看:Android ConstraintLayout使用指南 。另外,據谷歌官方放出的測試數據,ConstraintLayout在測量/布局階段的性能比RelativeLayout大約高40%,所以,沒有必要太擔心存在性能問題。

  • Android Architecture Components。Google今年出來的官方架構文檔,比起之前在Github上放出來的MVP文檔,我覺得這次的官方架構文檔可操作性要強得多。除了更詳細具體的指導,還有API層面的支持。具體詳情請戳:https://developer.android.com/topic/libraries/architecture/index.html
  • Android7.0的分屏以及Android8.0的畫中畫(Picture-in-picture)。這裡的效果大家可以上網上搜索視頻看看。
  • ARCore。Google不久前才開放出來的,對標是蘋果的ARKit,前些天簡單的體驗了一下,有興趣可以看看這篇:Android Google ARCore嘗鮮記錄 。最後放段ARCore的官方視頻,供大家觀賞。

暫時例舉的就以上這些了,有漏的到時候想到再補充吧。偶爾會在自己的公眾號發些技術和職場的文章,大家要是也有興趣的話,可以關注一下:技術視界(id:clock_life)。


Android技術更新很快,了解和學習最新技術可以提高自己的眼界,並且對以後的項目開發或是未來發展都有很大幫助。

在這個回答下,會不定期的分享一些技術,希望相互支持、學習!

Android Data Binding

我們可能需要在Activity里寫很多的findViewById,稍微複雜一點的界面就要寫一大堆的findViewById,重複的代碼也增加了我們代碼的耦合性,而Data Binding可以讓我們拋棄那麼多的findViewById。當然,DataBinding並不僅限於此。

首先,在應用中的build.gradle中添加

android {

...

dataBinding.enabled = true

}

之後,在你的界面文件中,用&&把已有的布局包裹起來,像下面這樣:

然後,在Activity中用下面的方式來綁定數據:

這裡的ActivityDatabindingBinding是根據布局文件activity_databinding.xml文件自動生成的,而xiaoGongJu大家發現了吧,其實就是控制項TextViewid

最後,效果圖:

Material Theme UI for Jetbrains

在其他的回答里會有人問,能否說一下IDE使用的主題。雖然這個和技術關係不大,但工欲善其事,必先利其器。

這裡推薦的主題是這個:

GitHub - ChrisRM/material-theme-jetbrains: JetBrains theme of Material Theme

安裝說明:

教程截圖:

搜索到插件後點擊安裝,Apply後重啟Android Studio就安裝成功了。

成功後,點擊Font,可以看到多出了三個主題來Darker theme、 Default theme、 Lighter theme。

你可以根據這三個進行配色、設置。如Material Theme - Darker Font設置當前主題的字體。

最後,效果圖:


Android中一個新API,獲取bitmap中的「主題色彩」,這個演算法不是很難理解,算是題主說的一個新特性吧。如天天動聽中根據寫真圖片的主題色改變按鈕顏色,感覺體驗很好。

----補充API說明---

Palette | Android Developers


在App開發層面最讓我期待的就是

Data Binding

Data Binding 作為support library支持Api Level7+,目前還在beta階段,並且只支持AS 1.3.0-beta。

目前需要更新一個TextView:

Data data = new Data();
data.name = "gilbert";
textView.setText(data.name);

而在使用了Data Binding後可以這樣寫:

Data data = new Data();
DataBindingUtil.setContentView(this, R.layout.main_activity).setData(data);

&

Data Binding作為MVVM的框架,Model將會自動更新View而無需經過ViewModel,可以最大限度的實現ViewModel(Activity等)和View的解偶。具體的實現可以參照官方的 Data Binding Guide

我並沒有深入研究過Data Binding,拋磚引玉一下,歡迎大神補充。

/*************************************/

http://android-developers.blogspot.com


題主要求的是新技術,那我就把出現的時間節點定義在2015年第二季度(2015.4之後)。我認為跟Android開發相關的一些比較有價值的東西,其中兩個很有價值的技術點,Android官方在今年的Google大會上推出的Data Binding和Facebook推出的Fresco,分別在我之前的回答:

android UI設計MVVM設計模式討論? - M.A.G.I 的回答

android程序員有必要學習c++嗎? - M.A.G.I 的回答

里提到過,這裡就不再重複,下面再補充一個:

LeakCanary:

內存泄漏是Android開發里一個非常重要而且頭疼的問題,並且在開發過程中很難避免,包括上次 @Gracker 提到的墨跡天氣吃掉400M內存很有可能就是因為內存泄漏。內存泄漏不僅會大量的消耗內存,而且容易引發包括OOM在內的很多問題,極大的影響了App乃至系統的性能。LeakCanary是Square的一個開源項目,用於檢測Java和Android的內存泄漏,在實際使用之後發現效果非常好,可以輕鬆的在Debug包中檢測出App的內存泄漏。順便說一句Square也是業內良心,開源庫的數量和質量都非常高。

相關鏈接:

square/leakcanary · GitHub

https://corner.squareup.com/2015/05/leak-canary.html


RxJava。

配合 retrolambda 感覺都不像在寫 Java。

當然也不算是很新。


Android博客周刊,每周可以獲取最新的Android技術。 http://www.androidblog.cn


授人以漁

隔三差五打開github,選擇Trending,選擇語言為Java,按天周月排序,好了,其他答案里說的這裡基本都有,挨個兒看吧,祝你好運~

示例 查看本月最火:https://github.com/trending?l=javasince=monthly


我是來頂Hybrid與React Native的,我一朋友所在的創業公司,折騰Dev們一年多,把Android iOS版本做的差不多了,進入了維護階段,結果發現沒太多東西做了,用不著那麼多人了,主要就用H5寫寫運營活動頁面,如果有一些其它功能,Hybird也能做不是嗎?找幾個前端實習生就好了,然後把Andorid, iOS Dev基本全開了,一樣留一個,現實就是如此殘酷,多點一些技能點,多一碗飯吃,大家趕緊點前端技能吧,往後沒準真就是web的天下了。


其它答案有的就不寫了

---------------------------------------- 測試 ----------------------------------------

15年出的新測試框架的介紹:https://docs.google.com/presentation/d/1EtFKPluGiuxZcr4W_cAziEY_--wbY_1otw44XEBv7JA/edit#slide=id.g98a986571_0_269 (What"s new in Android Testing Droidcon Italy 2015)

Google 在 Github 上的 demo: googlesamples/android-testing · GitHub

---------------------------------------- UI ----------------------------------------------------

JulienGenoud/android-percent-support-lib-sample · GitHub(Android 官方支持百分比布局了)

---------------------------------------- 獲取技術動態 ----------------------------------------

開發技術前線 (Android 項目地址:bboyfeiyu/android-tech-frontier · GitHub - 一個定期翻譯、發布國內外Android優質的技術、開源庫、軟體架構設計、測試等文章的開源項目,讓我們的技術跟上國際步伐。歡迎加入~)

Reddit Android 開發節點: Developing Android Apps 氛圍很好,大神出沒,Android Weekly 的很多東西都可以在這裡先看到。

Google + 社群:Android Performance Patterns | Android projects on Github

......

待續。。


Android插件化

隨著大廠的Apk包越來越大,也方便團隊並行開發,動態升級,模塊解耦,另外也解決java 方法數超過65535。很多的大廠都將一個Apk拆成多個Apk的模塊包。在用戶使用的時候才載入模塊。

1.淘寶伯奎:Android插件化及動態部署 阿里技術沙龍第十六期《android插件化及動態部署

這是手機淘寶團隊在阿里技術嘉年華上分享的手淘在這方面的技術分享

2.Apkplug:ApkPlug-移動應用模塊化解決方案

專門提供插件化解決方案的服務,類似於友盟

3.樂視分享的插件化解決方案:Android插件化的一種實現

一些開發者開源的解決方案

4.dynamic-load-apk singwhatiwanna/dynamic-load-apk · GitHub


今年感覺可以再更新一波了,instant run,各種開源出來的熱更新技術,插件化技術


CoordinatorLayout等相關布局


有好多上面已經提到拉,我補充幾個

RecyclerView:support-v7 包中的新組件,完美代替 ListView,相比於 ListView,我們只需要實現每一個 Item 的 Holder,RecyclerView 就會自動幫我們完成復用的工作,而不用我們去考慮怎麼復用每一個 Item。而且 RecyclerView 封裝了許多我們常常需要通過 ListView 完成的工作,非常贊的。

Transition:雖然 Transition 出來的有點早,但還是非常好用的,能讓 Activity、Fragment 等的切換動畫變得更自然,不會很突兀。

Retrofit:Retrofit 和Java領域的ORM概念類似, ORM把結構化數據轉換為Java對象,而Retrofit 把REST API返回的數據轉化為Java對象方便操作。同時還封裝了網路代碼的調用。

Espresso:Espresso 是一個提供了簡單 API 的用於 android app UI 測試的測試框架。為什麼要提供這個框架呢,專欄:為Android實現測試單元難點剖析,在這裡有相關的解析。


先碼…

Android最近需要關注的進化應該是

功能recent app—&>overview

這是個腦洞無極限的進化

回來電腦更新


Xposed ,這東西很強大相信很多人知道。對於開發者來說,還有很強大的一個用途,hotpatch ,可以說是神器。阿里有開源出來,在github 上

https://github.com/alibaba/dexposed

Java裡面的代理aop,你應該有所耳聞。這裡的hotpatch 是針對方法層面,你可以完全替代一個方法,或者是讓一些代碼在此方法之前或者之後執行。

舉例說,如果通過線上的監控,日誌分析,發現某段代碼有bug,那麼你可以對這個方法進行線上的hotpatch,而不需要重新發版本。

流程是,寫一個符合規範的針對此方法的patch類,編譯,然後推送至客戶端,app下次啟動時會載入此patch,當調用有bug方法時,對他進行攔截,去調用你patch中的代碼。從而實現hotpatch。阿里巴巴的例子說的不是很清楚,你需要結合xposed的例子去理解。


推薦閱讀:

互聯網產品經理需要懂得哪些技術?
為什麼 iOS 和原生 Android 沒有文件管理的概念?
GitHub 上都有哪些值得關注學習的 Android項目?
如何看待「谷歌醞釀將蘋果 Swift 作為安卓 APP 主要開發語言」?
如何評價不久之前發布的xposed for Android N?

TAG:Android應用 | Android開發 | 新技術 | Android |