Android R 適配對測試影響
https://mp.weixin.qq.com/s/ZrsO5VvURwW98PTHei0kFA
Android R正式版最近釋出了,應用陸陸續續要進行sdk適配。
下面寫幾個修改內容對應用會有影響的,以便在測試中更好地進行測試。
1. 分割槽儲存強制執行
targetSdkversion = 30 強制開啟分割槽儲存
如果是覆蓋安裝,可設定一個引數(android:preserveLegacyExternalStorage == “true”)暫時關閉分割槽儲存
但是隻要解除安裝重灌,就會失效
影響點:
外部檔案讀取和寫入
測試注意點:
SD卡互動/外部儲存裝置互動
解除安裝重灌和覆蓋安裝的軟體表現
2.媒體檔案訪問許可權
1)執行批量操作
Android 11 在MediaStore API新增多種方法,用於簡化特定媒體檔案更改流程
2)直接檔案路徑和原生庫訪問檔案
Android 11 恢復了使用直接檔案路徑訪問媒體檔案
影響點:
對圖片/視訊編輯更改刪除等操作,收藏等
測試注意點:
如影響點
3.所有檔案訪問許可權
MANAGE_EXTERNAL_STORAGE 這個許可權獲取所有檔案的管理許可權
影響點:
會有一個授予所有檔案的管理許可權的開關
測試注意點:
許可權相關測試
4.電話號碼相關許可權
Android 11 更改了應用在讀取電話號碼時使用的與電話相關的許可權
當用到TelecomManager類中的getLineNumber()和gerMsisdn()
原來的 READ_PHONE_STATE不能用,要換成READ_PHONE_NUMBERS
影響點:
應用獲取電話號碼
測試注意點:
應用獲取電話號碼的操作
5.自定義訊息框檢視被遮蔽
影響點:
toast彈出
6.APK簽名方案v2
當targetSdkversion = 30 應用必須加上v2簽名
7.媒體intent操作需要系統預設相機
只有預裝相機可響應以下intent操作
android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.media.action.IMAGE_CAPTURE_SECURE
也就是說,如果呼叫intent
喚起照相機,使用VIDEO_CAPTURE
的 action,只有系統的相機能夠響應,而第三方的相機應用不會響應了。
影響點:
對外部喚起使用第三方的相機應用拍照有影響
測試注意點:如影響點
8.5G
新的 Android 11 也是支援了5G 相關的
一些功能,包括:
-
檢測是否連線到了 5G 網路
-
檢查按流量計費性
9.後臺位置資訊訪問許可權
在搭載 Android 11 的裝置上,當應用中的某項功能請求在後臺訪問位置資訊時,使用者看到的系統對話方塊不再包含用於啟用後臺位置資訊訪問許可權的按鈕。如需啟用後臺位置資訊訪問許可權,使用者必須在設定頁面上針對應用的位置許可權設定一律允許選項。
即無始終允許該選項,只有一個指引使用者去應用設定頁面開啟始終允許的按鈕
主要涉及到兩點:
-
從 Android 10 系統的裝置開始,就需要請求後臺位置許可權
(ACCESS_BACKGROUND_LOCATION)
,並選擇Allow all the time (始終允許)
才能獲得後臺位置許可權。Android 11 裝置上再次加強
對後臺許可權的管理,主要表現在系統對話方塊
上,對話方塊不再提示始終允許字樣,而是提供了位置許可權的設定入口,需要在設定頁面選擇始終允許
才能獲得後臺位置許可權。 -
在搭載
Android 11 系統
的裝置上,targetVersion 小於 11 的時候,可以前臺後臺位置許可權一起申請,並且對話方塊提供了文字說明,表示需要隨時獲取使用者位置資訊,進入設定選擇始終允許
即可。但是 targetVersion 為 30 的時候,你必須單獨申請
後臺位置許可權,而且要在獲取前臺許可權之後,順序不能亂
。並且無任何提示,需要開發者自己設計提示樣式。
影響點:
有需要獲取位置的應用功能
測試注意點:
位置許可權測試
10.軟體包可見性
Android 11 中
,如果你想去獲取其他應用的資訊,比如包名,名稱等等,不能直接獲取了,必須在清單檔案中新增<queries>
元素,告知系統你要獲取哪些應用資訊或者哪一類應用。
需要查詢其他應用包名資訊的功能
11.文件訪問限制
上文儲存的時候說過可以通過SAF(儲存訪問框架--Storage Access Framework)
來訪問公共目錄,但是 Android 11 再次升級,部分目錄和檔案不能訪問了,具體如下:
無法再使用ACTION_OPEN_DOCUMENT_TREE intent
操作請求訪問以下目錄:
- 內部儲存卷的根目錄。
- 裝置製造商認為可靠的各個 SD 卡卷的根目錄,無論該卡是模擬卡還是可移除的卡。可靠的卷是指應用在大多數情況下可以成功訪問的卷。
- Download 目錄。
無法再使用ACTION_OPEN_DOCUMENT_TREE
或ACTION_OPEN_DOCUMENT intent
操作請求使用者從以下目錄中選擇單獨的檔案:
Android/data/ 目錄及其所有子目錄。
Android/obb/ 目錄及其所有子目錄
影響點:
以上檔案路徑的檔案操作
測試點:
在以上檔案路徑下進行的檔案操作測試
12.限制對 APN 資料庫的讀取訪問
13.在元資料檔案中宣告 "無障礙" 按鈕使用情況
做過無障礙輔助功能的應該都知道AccessibilityServiceInfo
要設定 flag 為FLAG_REQUEST_ACCESSIBILITY_BUTTON,getAccessibilityButtonController
方法獲取輔助功能按鈕控制器,並且可用於查詢輔助功能按鈕的狀態並註冊監聽器以進行互動和輔助功能按鈕的狀態更改。
但是,Android 11 開始,這樣寫不能獲取輔助按鈕回撥事件了,得換成另外一種寫法。在元資料檔案 (通常為 res/raw/accessibilityservice.xml) 中使用flagRequestAccessibilityButton
標記宣告您的無障礙服務與 "無障礙" 按鈕的關聯。
影響點:
無障礙輔助功能使用
測試注意:
無障礙輔助功能操作部分測試
14.裝置到裝置檔案傳輸
如果您的應用以 Android 11 為目標平臺,您將無法再使用 allowBackup 屬性停用應用檔案的裝置到裝置遷移。系統會自動啟用此功能。不過,即使您的應用以 Android 11 為目標平臺,您也可以通過將 allowBackup 屬性設定為 false 來停用應用檔案的雲端備份和恢復。
影響點:
應用檔案的雲端備份和恢復
15.自動重置許可權
如果應用以 Android 11 為目標平臺並且數月未使用,系統會通過自動重置使用者已授予應用的執行時敏感許可權來保護使用者資料。此操作與使用者在系統設定中檢視許可權並將應用的訪問許可權級別更改為拒絕的做法效果一樣。如果應用已遵循有關在執行時請求許可權的最佳做法,那麼您不必對應用進行任何更改。這是因為,當用戶與應用中的功能互動時,您應該會驗證相關功能是否具有所需許可權。
官方說明說的很清楚了,而且只要應用遵循有關在執行時請求許可權的最佳做法,也就是每次需要呼叫許可權
的時候都會去判斷,那麼就不會有什麼問題。
如果需要關閉這個功能怎麼辦呢?只有引導使用者去設定頁面關閉了,可以呼叫包含Settings.ACTION_APPLICATION_DETAILS_SETTINGS action
的 Intent 將使用者定向到系統設定中應用的頁面。
16.前臺服務型別
從 Android 9 開始,應用僅限於在前臺訪問攝像頭和麥克風。為了進一步保護使用者,Android 11 更改了前臺服務訪問攝像頭和麥克風相關資料的方式。如果您的應用以 Android 11 為目標平臺並且在某項前臺服務中訪問這些型別的資料,您需要在該前臺服務的宣告的 foregroundServiceType 屬性中新增新的 camera 和 microphone 型別。
適配 Android 11 手機
此模組的修改內容針對所有專案在Android 11
手機上存在的改動,與targetSdkVersion
無關。
1.資料訪問稽核
為了讓應用及其依賴項訪問使用者私密資料的過程更加透明,Android 11 引入了資料訪問稽核功能。藉助此流程得出的見解,您可以更好地識別和糾正可能出現的意外資料訪問。
哪些範疇屬於使用者私密資料呢?其實就是危險許可權的呼叫,所以這個功能就是提供了可以監聽危險許可權呼叫的監聽。主要涉及到的方法是AppOpsManager.OnOpNotedCallback
。無論是應用本身,還是依賴庫或者 SDK 中的程式碼,只要訪問到私密資料 (危險許可權),都會回撥給我們。
對於工程龐大或者使用較多 SDK的工程比較適合用上這個功能,讓自己應用的私有資料管理更加透明規範
,否則對於私有資料的使用和管理並不全面和方便。而且還可以對許可權使用新增歸因
,也就是一個 tag,標誌許可權用到了什麼地方。方便回撥的時候知曉哪裡使用了私有資料
。
意思就是,可通過設定來知道應用使用中什麼時候什麼地方用到什麼危險許可權
2.單次授權
在 Android 11 中,每當應用請求與位置資訊、麥克風或攝像頭相關的許可權時,面向使用者的許可權對話方塊會包含僅限這一次選項。如果使用者在對話方塊中選擇此選項,系統會嚮應用授予臨時的單次授權。
簡單的說,就是在申請與位置資訊、麥克風或攝像頭
相關的許可權時,系統會自動提供一個單次授權
的選項,只供這一次許可權獲取。然後使用者下次開啟 app 的時候,系統會再次提示使用者授予許可權。這個影響應該不大,只要我們每次使用的時候都去判斷許可權,沒有就去申請即可。放一張新版本許可權獲取樣式:
3.許可權對話方塊的可見性
Android 11 建議不要請求使用者已選擇拒絕的許可權。在應用安裝到裝置上後,如果使用者在使用過程中屢次針對某項特定的許可權點按拒絕,此操作表示其希望 "不再詢問"。這個都算不上改動,只是官方的一個良好建議
。建議在使用者多次拒絕之後,不要再展示許可權申請。
4.應用使用情況統計資訊
為了更好地保護使用者,Android 11 將每個使用者的應用使用情況統計資訊儲存在憑據加密儲存空間中。
這就涉及到了UsageStatsManager
,UsageStatsManager
是 Android 提供統計應用使用情況的服務。通過這個服務可以獲取指定時間區間內應用使用統計資料、元件狀態變化事件統計資料以及硬體配置資訊統計資料。
但是在 Android 11 裝置中,不能隨意使用這些資訊了。只有當isUserUnlocked()
方法返回 true 的時候,才能正常訪問這些資料。也就是以下兩種情況:
- 使用者在系統啟動後首次解鎖其裝置
- 使用者在裝置上切換到自己的帳號
4.無障礙操作
在以前的 Android 版本中,框架會向未正確處理基於點選的無障礙操作的微件分派觸控事件。通常,這些檢視會直接處理觸控事件,而不是註冊點選監聽器。為了在正確定義無障礙操作的應用中建立更一致的行為,Android 11 絕不會分派觸控事件。相反,系統會完全依賴於基於點選的無障礙操: ACTION_CLICK 和 ACTION_LONG_CLICK。此更改會影響螢幕閱讀器的行為。
在Android
手機上有個預安裝的螢幕閱讀服務,叫做TalkBack
,為視力障礙人士或者視力狀態不佳的老年人提供。那我們應用為了讓這個閱讀器能夠讀懂你的自定義 view 操作,必須給與自定義控制元件定義處理程式,包括點選,長按
等操作。原來版本可能對於OnTouchListener
也支援無障礙觸控事件,而在Android 11
中,必須專門制定點選或者長按事件才行了。
影響點:
talkback功能
測試注意點:
與talkback相關的功能