Android Q 提早適配攻略

Android Q 的預覽版發佈快半個月了,新一年的 Android 適配工做也要提上日程了,當前國產安卓機的系統更新愈來愈快,對及時適配的要求也就愈來愈高。根據預覽版放出的博客和已更新的文檔,咱們能夠提早準備處理一些適配的內容。html

目前看來,開發者能夠提早準備的工做包括:android

  1. 糾正 App 內文件儲存的路徑
  2. 適配獲取不到隱私數據的狀況
  3. 優化 Activity 異步啓動方案

所有的 Android Q 更新內容能夠閱讀原文(android-developers.googleblog.com/2019/03/int…bash

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 只能使用本身的應用空間存放文件。gradle

當 App 須要保存一些不能隨卸載刪除的文件時,須要根據存放位置動態申請新增的權限:READ_MEDIA_IMAGES,READ_MEDIA_VIDEOREAD_MEDIA_AUDIO(分別對應系統的媒體文件夾)。 比較特殊的是 Downloads 文件夾:寫入和讀取自身寫入的數據不須要申請權限,但想獲取其餘 App 存進去的文件時,必須使用系統的文件選擇器,由用戶選擇。優化

以上幾個路徑以外的全部位置均不可訪問,是否是很讓人安心呢?ui

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

隱私數據獲取調整

針對全部運行在 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 提示。具體的解決方案要再等等啦。

其餘適配相關內容簡報

其餘的更新內容估計要等 I/O 以後上真機調試了,就簡要描述一下吧

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

原文還提到了一些新特性,好比獲取圖片景深信息,神經網絡 API,新的音視頻解碼器等。若是工做中用得上相關內容就早點了解一下吧。

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

相關文章
相關標籤/搜索