Android 11 平台包含可能對應用程式造成影響的行為變更。無論 targetSdkVersion
為何,當應用程式在 Android 11 上執行時,下列行為變更將會套用至所有應用程式。您應測試應用程式,並視需要修改,以便在適當情況下支援新版本功能。
另請務必查看只會影響指定 Android 11 為目標版本應用程式的行為變更清單。
隱私權
為了加強使用者隱私,Android 11 推出了幾項變更和限制,包括:
- 單次權限:讓使用者可選擇授予更多暫時的位置、麥克風和相機權限。
- 權限對話方塊瀏覽權限:權限遭拒的重複情形意味著「不要再詢問」。
- 資料存取稽核:透過應用程式自己的程式碼和獨立程式庫的程式碼,取得應用程式存取私人資料的深入分析資訊。
- 系統快訊視窗權限:收到要求後,系統會自動將特定的應用程式類別授予
SYSTEM_ALERT_WINDOW
權限。此外,包含ACTION_MANAGE_OVERLAY_PERMISSION
意圖動作的意圖一律會將使用者導向系統設定中的畫面。 - 永久的 SIM 卡 ID:在 Android 11 以上版本中,透過
getIccId()
方法存取無法重設的 ICCID 會受到限制。此方法會傳回非空值的空字串。如要明確識別裝置上已安裝的 SIM 卡,請改用getSubscriptionId()
方法。訂閱 ID 會提供索引值 (從 1 開始),用於識別已安裝的 SIM 卡,包括實體和電子 SIM 卡。除非裝置恢復原廠設定,否則此 ID 的值對於特定 SIM 卡來說是固定的。
詳情請參閱隱私權頁面。
接觸通知
Android 11 將平台更新為接觸通知系統。使用者現可在 Android 11 上執行接觸通知應用程式,不必開啟裝置的位置資訊設定。只有接觸通知系統的例外情況,因為這項功能的設計讓使用此功能的應用程式無法透過藍牙掃描推論裝置位置。
為保護使用者隱私,除非裝置位置資訊設定開啟,且使用者已授予位置存取權,否則其他應用程式依然無法執行藍牙掃描。詳情請參閱「接觸通知最新消息」文章。
安全性
SSL 通訊端預設使用 Conscrypt SSL 引擎
Android 的預設 SSLSocket
實作是以 Conscrypt 為基礎。自 Android 11 起,該實作項目是以 Conscrypt SSLEngine
為基礎的內部建構而成。
Scudo 強化配置器
Android 11 會在內部使用 Scudo 強化配置來服務堆積分配量。Scudo 可以偵測及緩解某些類型的記憶體安全性違規行為。如果您在原生當機報告中看到與 Scudo 相關的當機事件 (例如 Scudo ERROR:
),請參閱 Scudo 疑難排解說明文件。
應用程式使用統計資料
為了進一步保護使用者,Android 11 會將每位使用者的應用程式使用統計資料儲存在憑證加密儲存空間中。因此,除非發生下列任一情況之後的 isUserUnlocked()
傳回 true
,否則系統或任何應用程式都無法存取該資料:
- 系統啟動後,使用者首次解鎖裝置。
- 使用者在裝置上切換至帳戶。
如果應用程式已繫結至 UsageStatsManager
例項,請檢查使用者解鎖裝置後,您是否會對這個物件呼叫方法。否則,API 現在會傳回空值或空白值。
模擬器 5G 支援
Android 11 新增了 5G API,可讓應用程式加入先進功能。如要在新增功能時進行測試,可以使用 Android SDK 模擬器的新功能。Emulator 30.0.22 版已新增功能。選取 5G 網路設定會將 TelephonyDisplayInfo
設為 OVERRIDE_NETWORK_TYPE_NR_NSA
、修改預估頻寬,並設定計量付費,驗證應用程式是否針對 NET_CAPABILITY_TEMPORARILY_NOT_METERED
狀態的變更做出適當回應。
效能和偵錯
JobScheduler API 呼叫限制偵錯
Android 11 為應用程式提供偵錯支援,協助找出超過特定頻率限制的潛在 JobScheduler
API 叫用。開發人員可以使用這個功能來找出潛在的效能問題。如果應用程式的 debuggable
資訊清單屬性設為 true,超過頻率限制的 JobScheduler
API 叫用會傳回 RESULT_FAILURE
。我們訂定了限制,因此正當用途應不受影響。
檔案描述元清理工具 (fdsan)
Android 10 推出了 fdsan
(檔案描述元清理工具)。
fdsan
會偵測檔案描述元擁有權的處理方式錯誤,例如「使用事後」(Use-after) 和雙關閉 (2)。在 Android 11 中,fdsan
的預設模式有所變更。fdsan
現在會在偵測到錯誤時取消;先前的行為是記錄警告並繼續。如果您在應用程式中發現 fdsan
造成的當機問題,請參閱 fdsan documentation
的說明。
非 SDK 介面限制
基於與 Android 開發人員合作及最新的內部測試,Android 11 包含更新後的受限制非 SDK 介面清單。在限制非 SDK 介面之前,我們盡可能確保公開替代方案的可得性。
如果您的應用程式並不是以 Android 11 為目標版本,則此處所述的某些變更可能不會立即對您造成影響。不過,雖然您目前可以使用某些非 SDK 介面 (視應用程式的目標 API 級別而定),但使用任何非 SDK 方法或欄位時,都會面臨應用程式中斷的高風險。
如果不確定應用程式是否使用非 SDK 介面,可對應用程式進行測試以便確認。如果您的應用程式仰賴非 SDK 介面,則建議您開始規劃遷移至 SDK 替代方案。我們瞭解有些應用程式可使用非 SDK 介面運作。如果您除了為應用程式中的某個功能使用非 SDK 介面外,已別無他法,則應要求新的公用 API。
如要進一步瞭解此 Android 版本中的變更,請參閱 Android 11 的非 SDK 介面限制更新內容。如要進一步瞭解非 SDK 介面的一般資訊,請參閱非 SDK 介面的限制。
已移除 Google 地圖第 1 版共用資料庫
Google 地圖共用資料庫第 1 版已在 Android 11 中完全移除。這個程式庫先前已淘汰,並停止支援 Android 10 中的應用程式。應用程式原先必須與 Android 9 (API 級別 28) 以下版本裝置依賴這個共用資料庫後,則應改用 Maps SDK for Android。
與其他應用程式互動
共用內容 URI
如果應用程式會與其他應用程式共用內容 URI,則意圖必須設定下列至少一項意圖旗標來授予 URI 存取權限:FLAG_GRANT_READ_URI_PERMISSION
和 FLAG_GRANT_WRITE_URI_PERMISSION
。這樣一來,即使其他應用程式指定 Android 11 為目標,仍然可以存取內容 URI。即使內容 URI 與非應用程式擁有的內容供應器相關聯,也必須包含意圖旗標。
如果應用程式擁有與內容 URI 相關聯的內容供應器,請確認未匯出內容供應器。我們已推薦採用這項安全性最佳做法。
正在載入媒體庫
使用絕對路徑載入 ICU 通用程式庫
指定 API 28 以下版本的應用程式無法使用 dlopen(3)
載入絕對路徑「/system/lib/libicuuc.so」的 libicuuc
。對於這些應用程式,dlopen("/system/lib/libicuuc.so", ...)
會傳回空值控制代碼。
如要載入程式庫,請使用程式庫名稱做為檔案名稱,例如 dlopen("libicuuc.so", ...)
。