序
Android Q 的預覽版釋出快半個月了,新一年的 Android 適配工作也要提上日程了,當前國產安卓機的系統更新越來越快,對及時適配的要求也就越來越高。根據預覽版放出的部落格和已更新的文件,我們可以提前準備處理一些適配的內容。
目前看來,開發者可以提前準備的工作包括:
- 糾正 App 內檔案儲存的路徑
- 適配獲取不到隱私資料的情況
- 優化 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_STORAGE
和WRITE_EXTERNAL_STORAGE
兩項危險許可權,限制 App 只能使用自己的應用空間存放檔案。
當 App 需要儲存一些不能隨解除安裝刪除的檔案時,需要根據存放位置動態申請新增的許可權:READ_MEDIA_IMAGES
,READ_MEDIA_VIDEO
或 READ_MEDIA_AUDIO
(分別對應系統的媒體資料夾)。 比較特殊的是 Downloads 資料夾:寫入和讀取自身寫入的資料不需要申請許可權,但想獲取其他 App 存進去的檔案時,必須使用系統的檔案選擇器,由使用者選擇。
以上幾個路徑之外的所有位置均不可訪問,是不是很讓人安心呢?
[模擬器測試結果]
測試安裝了一個 targetSdkVersion=26 的 demo 專案,除了動態申請儲存許可權時的文案之外一切都沒改變,應該是相容了 targetSdkVersion 小於 Q 的 App。考慮到應用市場對 targetSdkVersion 要求(今年只要求到28),最晚要在明年 Android R 面世之前完成適配。
隱私資料獲取調整
針對所有執行在 Android Q 裝置上的 App:
- 不再能獲取聯絡人的關係:(說起來估計沒有人新增聯絡人的時候會填那項吧)
- 全面隨機MAC地址:關於MAC地址的獲取 Android 每個版本都在改,不知道這次還有沒有能繞過限制的方法…
- 禁止訪問
/proc/net
:但文件說相關內容可以通過NetworkStatsManager
和ConnectivityManager
獲取 - 禁止獲取 IMEI 和裝置序列號:新增了特權(普通 App 申請不了的那種)
READ_PRIVILEGED_PHONE_STATE
去保護裝置的唯一識別符號。官方的解決方案是這樣:developer.android.com/training/ar… - 後臺執行的 App 禁止訪問剪貼簿,除非是預設輸入法 App。
針對 targetSdkVersion 在 Android Q 的 App:
- 獲取 USB 序列號需要使用者授權
體驗優化:禁止後臺啟動 Activity
雖然聽起來不太常見,但其實很多 App 的 啟動頁都是倒數計時後進入首頁的,這期間按 HOME 退出的話,就會觸發後臺啟動 Activity。如果該行為被阻止,再次點選應用圖示就可能卡在啟動頁進退兩難了…所以這裡應該需要增加一下對生命週期的處理吧。
但是經測試,虛擬機器的系統映象還能正常啟動,只多了一條 Toast 提示。具體的解決方案要再等等啦。
其他適配相關內容簡報
其他的更新內容估計要等 I/O 之後上真機除錯了,就簡要描述一下吧
- App 在後臺使用定位需要動態申請
ACCESS_BACKGROUND_LOCATION
- 注意:不可單獨申請,原來的定位許可權依然需要
- 提供 摺疊屏/多屏顯示 適配方案(生命週期調整)
- share intent UI 預載入
- 設定皮膚:可以在 App 內喚起簡易設定頁面(網路/音量/NFC)
- Wifi 模式選擇(high performance / low latency)
結
原文還提到了一些新特性,比如獲取圖片景深資訊,神經網路 API,新的音視訊解碼器等。如果工作中用得上相關內容就早點了解一下吧。
祝喜歡 Android 的各位工作順利~