Android Q 相容那些事

AndroidTraveler發表於2019-05-27

Android Q 相容那些事

5 月 20 號參加了 Android Q Labs,因此本篇說一說會議的部分內容以及自己的一些想法。

會議主要是加深開發者對 Android Q 的瞭解,從而幫助開發者做好 Android Q 的相容工作。

因此本篇我會選擇性說明一些在 Android Q 上你需要相容的一些事情。

1. 後臺 Activity 啟動限制

首先我們說說為什麼要限制後臺 Activity 的啟動。

Android Q 之前的情況如下:
Android Q 相容那些事

考慮下面的幾個場景:

  1. 我在開車過程中使用導航地圖進行導航
  2. 我在使用拍照功能拍攝一個關鍵場景的視訊
  3. 我在玩遊戲,比如王者榮耀,正準備團戰拿五殺的時刻
    ......

假設在上面的幾個場景中,突然後臺 Activity 彈出一個框,可能是廣告框,也可能是搶佔我介面的其他介面。

這個時候我覺得內心是奔潰的,而且使用者體驗超級不好。

Android Q 相容那些事

基於此,Android Q 裡面引入了對後臺 Activity 啟動的限制。

Android Q 相容那些事

注意關鍵的一個點是這個變化對所有在 Android Q 上執行的應用都會有影響。無論你的 targetSDK 版本。

所以如果你的 APP 存在這種場景的情況下,你就需要做一下額外處理了。

基本的處理方式是通過 Notification 彈一個通知,如果使用者想點再點選進入你的 Activity。

那麼現在有哪些 APP 會用到這種呢?舉一個大家熟悉的。

這邊測試了一下,微信語音通話是會直接從後臺啟動全屏覆蓋的,所以可能微信需要針對這個行為變更做處理。

2. 儲存的變化

先看下 Q 之前的情況:

Android Q 相容那些事

Q 的變化分兩部分來說明吧。

一部分是 MediaStore 的處理,另一部分是分割槽儲存的處理。

先說說 MediaStore,什麼是 MediaStore 呢?

Android Q 相容那些事

對於 MediaStore,Q 的處理如下:

Android Q 相容那些事

可以看到對於 MediaStore,可以直接寫,讀的話僅僅限於自己寫進去的檔案。如果要檢視其它應用提供的內容,需要獲取讀許可權。

另外你會發現 MediaStore 上面只有媒體相關的,如果檔案是非媒體型別呢?所以 Q 新增 MediaStore.Downloads,如下:
Android Q 相容那些事

總結起來如下:

許可權的變更:在沒解除安裝的情況下,自己 APP 寫或者讀 MediaStore 媒體檔案不需要許可權。讀其他的需要許可權。解除安裝後讀自己之前寫入的也需要許可權。

Android Q 相容那些事

Android Q 相容那些事

另外還有一個就是圖片有一個位置資訊,這個對使用者來說也是隱私,因此需要做額外處理。

Android Q 相容那些事

Android Q 相容那些事

說完了 MediaStore,接下來說說分割槽儲存。

Android Q 相容那些事

Android Q 相容那些事

Android Q 相容那些事

Android Q 相容那些事

總結起來就是分割槽儲存模式下,不能夠再直接訪問 /sdcard 下的檔案,而要通過 MediaStore 或者 SAF。當然自己 packagename 命名的目錄下面還是可以訪問的。

另外目前可以通過在清單檔案設定是否啟用。可以設定 targetSDK 為 Q 的應用不啟用,也可以設定 targetSDK 低於 Q 的啟用。通過程式碼可以確認是否處於分割槽儲存模式下。

推薦儘快完成適配,因為目前是為了給開發者更多時間適應這個變化,等到下一個版本 Android R 的時候會強制執行分割槽儲存模式,到時候清單檔案的設定也是沒用的。因此強烈建議將這個工作排上相容行程。當然在 Q 的相容上可以根據自身業務進度進行設定,假設時間不夠,可以暫時不啟用,但是後續需要排期處理。

3. 位置許可權

我們看看 Android P 申請位置許可權的對話方塊:

Android Q 相容那些事

可以看到只有允許和拒絕兩個選項。

現在看看 Android Q 的:

Android Q 相容那些事

會發現多了一些選項,其中有一個僅在使用該應用時允許

在 Android P 的時候,清單檔案只需要申請一個許可權:

Android Q 相容那些事

而在 Q 上面,有兩個,其中一個有 background 的。

Android Q 相容那些事

之所以有兩個,就是希望儘量少的獲取許可權,除非是你的 APP 真的有這個需求。在申請的時候也建議增量申請,什麼意思呢?

首先第一步先獲取位置許可權:
Android Q 相容那些事
在使用者允許的情況下,如果 APP 需要,再進行增量許可權請求:
Android Q 相容那些事

推薦的位置許可權最佳實踐如下:
Android Q 相容那些事

4. 深色主題

Q 支援深色主題,相容有兩種方式。

一種就是簡單粗暴,適合時間少的。
一種就是推薦的,適合有足夠時間的。

簡單的方式如果是全域性設定,只需要設定主題即可:
Android Q 相容那些事
如果你需要對單個 View 做設定,也是可以的:
Android Q 相容那些事

推薦的方式是使用 DayNight。

不過我在測試區啟動深色主題時發現有點卡,估計後面系統還需要優化。

5. BubbleView 和指紋識別

BubbleView 其實就是懸浮窗。指紋識別也是 Android Q 引入的一個官方方式。
這個不需要做相容,算是新功能,這裡不贅述。

Android Q 相容那些事

Android Q 相容那些事

6. Kotlin vs Flutter

其實在程式碼演示的時候,我注意到 PPT 上面的程式碼基本都是 Kotlin。

包括之前的 Kotlin-first 以及這次 Q & A 環節也有小夥伴提問到底 Google 主推 Kotlin 還是 Flutter。

Android Q 相容那些事

我這邊說下我的看法吧。

我覺得 Kotlin 和 Flutter 不衝突。

首先第一個 Kotlin 是一門語言,而 Flutter 是一個跨平臺方案。

如果你的 APP 有跨平臺的需求,或者有很多頁面需要開發,人手不足,功能迭代比較頻繁,那麼你可以瞭解或者嘗試使用 Flutter 來開發介面。一套程式碼,兩端執行。尤其 Flutter 1.5 佈局很廣,涵蓋了移動端、Web、桌面端和嵌入式。

Android Q 相容那些事

對於 Android 開發者,可以看我的 Flutter 即學即用系列部落格快速入門。

說完了 Flutter,說下 Kotlin 吧。

Kotlin 是一門語言,語言是幹嘛的?是實現我們業務的工具。

假設現在 Java 和 Kotlin 都可以實現我們的業務功能,並且官方都支援這兩種語言,你有必要花很多時間去單獨學習 Kotlin 嗎?我覺得沒太大必要。

所以我覺得對待 Kotlin 你可以瞭解一下,能夠看懂 Kotlin 程式碼,會寫簡單的 Demo,我覺得就夠了。

當然如果你時間足夠,想多學一門語言,完全沒問題。

以上是參加這次會議的一些簡單總結和看法,更多內容通過下面的全程錄影瞭解。

本次 Android Q Labs 全程錄影可以通過連結觀看:Android Q Labs

Android Q 相容那些事

相關文章