Android Q 提前適配攻略

万俟霜風發表於2019-03-28

Android Q 的預覽版釋出快半個月了,新一年的 Android 適配工作也要提上日程了,當前國產安卓機的系統更新越來越快,對及時適配的要求也就越來越高。根據預覽版放出的部落格和已更新的文件,我們可以提前準備處理一些適配的內容。

目前看來,開發者可以提前準備的工作包括:

  1. 糾正 App 內檔案儲存的路徑
  2. 適配獲取不到隱私資料的情況
  3. 優化 Activity 非同步啟動方案

全部的 Android Q 更新內容可以閱讀原文(android-developers.googleblog.com/2019/03/int…

PS:嘗試使用 Android Q beta 的話,下載完 SDK 後需要這樣配置 build.gradle:

    compileSdkVersion 'android-Q'
    defaultConfig {
    ...
        targetSdkVersion 'Q'
    ...// 目前不存在數字29哦
    }
複製程式碼

資料隱私保護:沙盒機制

對於 Android 使用者來說,這是一項非常優秀的改進。自從 Android M 以來,我已經遇到許多不給讀寫外存許可權就無法使用的 App 了。結果是開啟檔案管理就能看到一堆亂七八糟的檔案和資料夾,這對習慣自己整理儲存空間的人來說太痛苦了。

但讀寫外存的許可權並非必要的。通過Context.getExternalFilesDir可以獲取到屬於 App 自身的檔案路徑,通常是~/Android/data/<package-name>/**/。在該目錄中讀寫檔案均不需要申請許可權,當 App 被解除安裝時,該資料夾及內容也會全部刪除。

Android Q 中刪除了READ_EXTERNAL_STORAGEWRITE_EXTERNAL_STORAGE兩項危險許可權,限制 App 只能使用自己的應用空間存放檔案。

當 App 需要儲存一些不能隨解除安裝刪除的檔案時,需要根據存放位置動態申請新增的許可權:READ_MEDIA_IMAGES,READ_MEDIA_VIDEOREAD_MEDIA_AUDIO(分別對應系統的媒體資料夾)。 比較特殊的是 Downloads 資料夾:寫入和讀取自身寫入的資料不需要申請許可權,但想獲取其他 App 存進去的檔案時,必須使用系統的檔案選擇器,由使用者選擇。

以上幾個路徑之外的所有位置均不可訪問,是不是很讓人安心呢?

[模擬器測試結果]
測試安裝了一個 targetSdkVersion=26 的 demo 專案,除了動態申請儲存許可權時的文案之外一切都沒改變,應該是相容了 targetSdkVersion 小於 Q 的 App。考慮到應用市場對 targetSdkVersion 要求(今年只要求到28),最晚要在明年 Android R 面世之前完成適配。

隱私資料獲取調整

針對所有執行在 Android Q 裝置上的 App:

  • 不再能獲取聯絡人的關係:(說起來估計沒有人新增聯絡人的時候會填那項吧)
  • 全面隨機MAC地址:關於MAC地址的獲取 Android 每個版本都在改,不知道這次還有沒有能繞過限制的方法…
  • 禁止訪問/proc/net:但文件說相關內容可以通過NetworkStatsManagerConnectivityManager獲取
  • 禁止獲取 IMEI 和裝置序列號:新增了特權(普通 App 申請不了的那種)READ_PRIVILEGED_PHONE_STATE去保護裝置的唯一識別符號。官方的解決方案是這樣:developer.android.com/training/ar…
  • 後臺執行的 App 禁止訪問剪貼簿,除非是預設輸入法 App。

針對 targetSdkVersion 在 Android Q 的 App:

  • 獲取 USB 序列號需要使用者授權

體驗優化:禁止後臺啟動 Activity

雖然聽起來不太常見,但其實很多 App 的 啟動頁都是倒數計時後進入首頁的,這期間按 HOME 退出的話,就會觸發後臺啟動 Activity。如果該行為被阻止,再次點選應用圖示就可能卡在啟動頁進退兩難了…所以這裡應該需要增加一下對生命週期的處理吧。

但是經測試,虛擬機器的系統映象還能正常啟動,只多了一條 Toast 提示。具體的解決方案要再等等啦。

Android Q 提前適配攻略

其他適配相關內容簡報

其他的更新內容估計要等 I/O 之後上真機除錯了,就簡要描述一下吧

  • App 在後臺使用定位需要動態申請ACCESS_BACKGROUND_LOCATION
    • 注意:不可單獨申請,原來的定位許可權依然需要
  • 提供 摺疊屏/多屏顯示 適配方案(生命週期調整)
  • share intent UI 預載入
  • 設定皮膚:可以在 App 內喚起簡易設定頁面(網路/音量/NFC)
  • Wifi 模式選擇(high performance / low latency)

原文還提到了一些新特性,比如獲取圖片景深資訊,神經網路 API,新的音視訊解碼器等。如果工作中用得上相關內容就早點了解一下吧。

祝喜歡 Android 的各位工作順利~

Android Q 提前適配攻略

相關文章