Now in Android | 11 月刊 · 2019

做者 / Chet Haase, Android 開發技術推廣工程師html

歡迎你們來到 Now in Android 欄目,本欄目將專一於爲開發者們提供近期值得關注的 Android 開發熱點內容。java

請務必跟上 Android 10

咱們在 Android 10 預覽版階段收到了有關 API 和功能的重要反饋,而且得以在發佈最終版以前進行改進。但另外一方面,預覽版讓操做系統在真正發佈時不那麼使人興奮了,由於每一個人都已經知道了那些新功能。就像是您看着別人在您面前把禮品打包好,而後您再打開包裝同樣,可能不會有太多的驚喜。

可是咱們相信,開發者們會體驗到一種不同的知足感: 知道事情已經完成,知道本身手上的 API 都是穩定的,並能夠開始使用它構建應用。並且不少時候開發者還能直接得到源代碼,這會帶來巨大的優點。同時您也知道,如今用戶會開始獲取和使用這個版本。android

正式發佈的 Android 10 (包括 AOSP、開發者下載版及其餘渠道),包含了咱們一直努力構建的全部功能的最終版本: 手勢導航、隱私功能、實時字幕、智能通知、深色主題、ART 優化等等。您能夠在 Android 開發者博客中查看概述,或者直接進入開發者網站閱讀詳細文檔並下載所需的資源。git

除了穩定,仍是穩定

大量 AndroidX 庫剛剛發了穩定版本,其中包括許多基礎模塊,一些架構組件以及媒體庫:github

AndroidX 版本已完成分類

AndroidX 版本頁面最近變得愈來愈好用了。若是您只關心穩定版本 (或是隻想了解最新的 Alpha 版本),只需掃一眼頁面頂部給出的分類連接便可。編程

例如,若是您想了解上面提到的穩定代碼庫,只需單擊該頁面右上角的 Stable 分類連接便可。

示例代碼大遷移

組織代碼其實有點像作家務: 最初,一切都是各就各位的,幾年後,裝黃油的盤子就會出如今書架上、訂書機會和裝糖的碗放在一塊兒、過節日時掛起來的各類裝飾永遠不會被撤下來,由於沒有別的地方能夠放。

咱們的 Android 示例庫就處於這個狀態。剛開始時,整理的工做量不值一提,可是在通過了數百個項目以後,狀況開始變得混亂起來。android-studio

在你們的共同努力下,咱們已經至關完全的整理了 Android 示例代碼庫,如今您能夠在同一個地方找到它們: github.com/android,這些例子如今被分類爲 17 個小 repo 組,方便您更輕鬆地在相關課題中找到樣例項目。咱們的示例代碼倉庫也接受開發者們的 Pull Request,歡迎你們嘗試並積極貢獻。安全

△ 整理以後的 repos 更整潔、識別度更高
遷移工做還沒有所有完成,但到目前爲止,咱們已經從 136 個項目中整理出了 127 個。其他部分將在接下來的幾周內完成。

爲 Java 開發者準備的 Kotlin 教程

Kotlin 之因此在 Android 開發者中如此流行,首先是由於它是一種很好的語言,一樣值得一提的是它與 Java 語言的強大互操做性。畢竟,大多數 Android 項目都是已經成型的代碼庫,而 Android SDK 是一組 Java API,所以,不一樣語言之間的流暢集成很是重要。bash

您在添加 Kotlin 代碼時須要注意一些細節,這些細節會讓您在未來更容易使用 Java 代碼。爲了讓你們更好地理解這些細節知識,Nicole Borrelli 最近發佈了這個 codelab,來幫助那些但願流暢使用 Java 代碼的 Kotlin 開發者。架構

視圖綁定 (View binding)

開發者們討厭樣板代碼。咱們一輩子中能輸入的字符數量是有限的,爲何要在沒必要要的語法和表達式上浪費生命?

在深受困擾的開發者們看來,Android 開發中不斷出現的樣板代碼中最惱人的就是 findViewById()。每當您要引用層次結構中的視圖時,都必須使用正確的視圖 ID,並重復輸入類型信息。

您最終會寫出這樣的代碼:

var b: Button = findViewById(R.id.button23)
// or
var b = findViewById<Button>(R.id.button23)
// or even
var b = findViewById(R.id.button23) as Button
複製代碼

單獨看起來,須要的代碼量並不不少,可是當您必須對每一個視圖都這麼處理的時候,這個工做量就不能視若無睹了。

一種流行的解決方法是使用 ButterKnife 代碼庫,讓您能這樣註解變量:

@BindView(R.id.button23)
lateinit var button: Button
複製代碼

開發者們還會使用數據綁定來實現相似的效果,這種作法的本質是,在與佈局文件關聯的綁定對象中爲視圖建立變量。

不過在架構組件的最新進展中,咱們談到了 Jake Wharton 正在研究的一種新機制: 視圖綁定 (View Binding)。視圖綁定更接近數據綁定,從而避免了 ButterKnife 的註解處理方法。用 Jake 的話說,"這是 findViewById 和完整數據綁定的中間地帶。"

要使用視圖綁定,首先須要在 gradle 構建中啓用它:

android {
   viewBinding.enabled = true
}
複製代碼

而後,在您的代碼中就能夠得到對綁定對象的引用,而且直接經過綁定對象裏的字段訪問視圖。它的工做方式與數據綁定相似,可是不須要專門的數據資源文件,而只需使用普通的 XML 佈局文件便可。

視圖綁定Android Studio 3.6 Canary 11 能夠開始體驗。

分區存儲

Android 10 帶來的一個重要特性是分區外部存儲 (Scoped External Storage),旨在限制應用對不是本身建立的文件的訪問權限,從而保護用戶的數據安全與隱私。

簡而言之: 應用能夠隨時訪問本身建立的文件,不須要受權。可是,若是要訪問其餘應用建立的照片/視頻/音頻文件,則必須得到 READ_EXTERNAL_STORAGE 權限。對於其餘文件類型,則必須使用 Storage Access Framework 來讓用戶選取文件。

△ 使用正確的權限和 MediaStore API 來讓您的 Android 10 應用訪問由其餘應用建立的內容

咱們準備了詳細的文檔,涵蓋了處理外部存儲文件的 API 和作法。但若是您是剛接觸外部文件存儲的話,閱讀文檔裏的說明可能會須要多花費一些精力,咱們也會努力迭代文檔以讓內容更加易懂。與此同時,Nicole Borrelli 在 Github 上的 Storage Samples 項目中建立了 MediaStore 示例來幫助您快速上手。示例裏有展現應該如何請求適當權限訪問文件,而後使用適當的 MediaStore API 來實際加載它們。

在咱們近期連載發佈 2019 Android 開發者峯會中文視頻中也有一個關於分區存儲的演講,分享了一些最新的更新和接下來 Android 版本里的改變。

  • 騰訊視頻連接:

v.qq.com/x/page/d302…

  • Bilibili 視頻連接:

www.bilibili.com/video/av771…

Kotlin Codelabs

您也許已經據說過 Kotlin 了,但您可能一直還沒上手使用它。咱們也已經準備了 Udacity 的課程來幫助您學習 Kotlin 以及使用 Kotlin 開發 Android 應用。

但若是您不是很喜歡看視頻,或者只是想按照本身的節奏來學習 Kotlin 的話,咱們從上述課程中提煉出了核心內容,並作成了一系列的 codelab 供您上手嘗試。

Kotlin 編程新手營》是一套完整的課程 (由一系列 codelab 組成),它將引導您學習 Kotlin 的許多基礎知識。課程假定您已經熟悉面向對象編程,並會基於此向您介紹 Kotlin 的一系列概念,如函數、類和 lambda 等。

Android Kotlin 基礎》則是一套針對 Android 開發的課程 (一樣由一系列 codelab 組成),這套課程使用 Kotlin 語言來說授 Android 開發中的許多重要概念。包括 Android 的一些基礎知識,例如佈局和生命週期;還包括全部 Android 開發者應該學習和使用的最新實踐案例,例如 RecyclerView 和架構組件。請注意,該課程不會把教學重點放在 Kotlin 語言自己,所以建議您先完成《Kotlin 編程新手營》課程。

別忘了上手試試 Android 10 的分區存儲功能,也但願您體驗一下咱們的 Kotlin codelabs 系列課程。謝謝對 Now In Android 欄目的支持,祝你們在 Android 開發路上一切順心!

點擊這裏提交產品反饋建議

相關文章
相關標籤/搜索