Android O 中對裝置識別符號所做的變更
Android O 引入若干改進,幫助使用者控制識別符號的使用。這些改進包括:
限制使用不可重置的裝置範圍識別符號
更新 Android O WLAN 堆疊,更改 Pixel、Pixel XL 和 Nexus 5x 手機所使用的 WLAN 晶片組韌體,以便在探測請求中隨機分配 MAC 地址
更新應用請求帳號資訊的方式,提供更多面向使用者的控制
裝置識別符號變更
以下是 Android O 中對裝置識別符號所做的部分變更:
Android ID
在 O 中,對於裝置上的每個應用和每個使用者,Android ID(Settings.Secure.ANDROID_ID 或 SSAID)均有不同的值。需要使用裝置範圍的識別符號的開發者應改用可重置的識別符號,例如廣告 ID,以便賦予使用者更多的控制權。廣告 ID 還提供了面向使用者的設定,用於限制廣告跟蹤。
此外,在 Android O 中:
只要軟體包名稱和簽名金鑰相同,在軟體包解除安裝或重新安裝時,ANDROID_ID 的值不會改變。應用可以依靠此值保持每次重新安裝之後的狀態。
如果應用安裝在執行更早版本 Android 的裝置上,則除非解除安裝並重新安裝該應用,否則,在裝置更新至 Android O 之後,應用的 Android ID 將保持不變。
只有在裝置恢復出廠設定或者簽名金鑰在解除安裝和重新安裝事件期間輪換時,Android ID 的值才會改變。
只有預裝 Google Play 服務和廣告 ID 的裝置製造商才需要更改此值。其他裝置製造商可以提供一個替代的可重置 ID 或者繼續提供 ANDROID ID。
Build.SERIAL
為了與訪問 IMEI 所需的執行時許可權保持一致,對於針對 Android O 或更新版本的應用,現已棄用 android.os.Build.SERIAL。它們可以改為使用新的 Android O API,即Build.getSerial(),只要呼叫方擁有 PHONE 許可權,該函式將返回實際序列號。在未來版本的 Android 中,針對 Android O 的應用所查詢到的 Build.SERIAL 將顯示為“UNKNOWN”。為避免中斷舊版應用的正常工作,針對以前版本 Android 的應用所查詢到的裝置序列號仍和以前一樣。
Net.Hostname
Net.Hostname 提供裝置的網路主機名。在之前版本的 Android 中,網路主機名的預設值和 DHCP 主機名選項的值均包含 Settings.Secure.ANDROID_ID。在 Android O 中,net.hostname 為空,DHCP 客戶端在 IETF RFC 7844 之後,不再傳送主機名(匿名保護的個人資料)。
Widevine ID
對於搭載 O 的新裝置,Widevine 客戶端 ID 將為每個應用軟體包名稱和網路源(對於網路瀏覽器)返回一個不同的值。
特殊的系統和設定屬性
除了 Build.SERIAL 之外,還有其他設定和系統屬性在 Android O 中不可用。這些包括:
ro.runtime.firstboot:在上次滑屏或上次啟動之後第一次啟動的毫秒級時間戳
htc.camera.sensor.front_SN:相機序列號(在某些 HTC 裝置上可用)
persist.service.bdroid.bdaddr:藍芽 MAC 地址屬性
Settings.Secure.bluetooth_address:裝置藍芽 MAC 地址。在 O 中,只有擁有 LOCAL_MAC_ADDRESS 許可權的應用才可以使用此屬性。
在 WLAN 探測請求中,隨機分配 MAC 地址
我們攜手安全研究人員1 ,共同針對 Google Pixel 和 Nexus 5X 裝置中的晶片組韌體所產生的 WLAN 掃描流量設計了可靠的 MAC 地址隨機分配功能。隨後,Android Connectivity 團隊又與製造商合作,更新這些裝置所使用的 WLAN 晶片組韌體。
Android O 將這些韌體變更整合到 Android WLAN 堆疊中,因此,使用這些更新過韌體的晶片組並執行 O 或更高版本 Android 的裝置將可以充分利用這些變更。
以下是我們對執行 O 及更高版本 Android 的 Pixel、Pixel XL 和 Nexus 5x 韌體所做的一些變更:
在 WLAN 從接入點斷開時,每次掃描 WLAN 時,手機都會使用新的隨機分配的 MAC 地址(無論裝置是否處於待機狀態)。
每次掃描的初始資料包序列號也是隨機生成的。
不必要的探測請求資訊元素已被移除:所要求的資訊元素僅限於 SSID 和 DS 引數集。
getAccounts API 中的變更
在 Android O 及更高版本中,擁有 GET_ACCOUNTS 許可權不再足以獲取對裝置上已註冊帳號列表的訪問權。應用必須使用管理特定帳號型別的應用所提供的 API,或者使用者必須通過帳號選擇器 Activity 授予訪問此帳號的許可權。例如,Gmail 可以訪問裝置上已註冊的 Google 帳號,這是因為 Google 擁有 Gmail 應用,但使用者可能需要授予 Gmail 對裝置上註冊的其他帳戶資訊的訪問權。
要獲得帳號訪問許可權,針對 Android O 或更高版本的應用應使用 AccountManager#newChooseAccountIntent() 或特定於身份驗證器的方法。目標 SDK 版本較低的應用仍可使用當前的流程。
在 Android O 中,應用也可以使用 AccountManager.setAccountVisibility()/ getVisibility() 方法來管理這些應用所擁有的帳號的可見性策略。
此外,LOGIN_ACCOUNTS_CHANGED_ACTION 廣播已棄用,但在 Android O 中仍可工作。應用應使用 addOnAccountsUpdatedListener() 來獲取執行時帳戶的更新,以獲取應用指定的帳戶型別列表。
如需瞭解詳細資訊,請查閱唯一識別符號最佳做法:
https://developer.android.google.cn/training/articles/user-data-ids.html
瞭解更多細節,檢視文內所有連結,請點選文末“閱讀原文”。
推薦閱讀:
福利第二彈 | 尋找全中國使用TensorFlow的開發者和公司
召集所有願意搶先體驗Android Studio預覽版的使用者
點選「閱讀原文」,檢視文內連結
相關文章
- 利用solaris的mknod變更format(陣列裝置識別符號)ORM陣列符號
- iOS裝置識別符號及許可權合集iOS符號
- iOS怎樣獲取裝置唯一識別符號iOS符號
- platform_driver驅動及裝置驅動匹配識別符號Platform符號
- java:識別符號 關鍵字 變數Java符號變數
- JAVA-識別符號、變數、資料型別Java符號變數資料型別
- JavaScript 識別符號JavaScript符號
- python的識別符號Python符號
- <Python>識別符號、變數的定義與使用Python符號變數
- 命令識別符號(轉)符號
- javascript基礎語法——變數和識別符號JavaScript變數符號
- gvim中對變數的識別變數
- 06:合法 C 識別符號符號
- 《Effective Go》--空白識別符號Go符號
- oracle 識別符號規範Oracle符號
- aix 系統識別符號AI符號
- Android O 行為變更官方指南Android
- Java資料型別、識別符號Java資料型別符號
- C語言-識別符號命名C語言符號
- 識別符號與關鍵字符號
- java基本無法-識別符號Java符號
- Oracle 12.2 長識別符號Oracle符號
- 標準HTML識別符號 (轉)HTML符號
- .vue檔案中style標籤的幾個識別符號Vue符號
- Python中的識別符號有哪些基礎原則?Python符號
- linux mdev實現裝置符重對映/裝置符手動新增Linuxdev
- C++ 提示未宣告的識別符號C++符號
- 名稱 ****不是有效的識別符號 sql符號SQL
- 簡單介紹Go 中的空白識別符號下劃線Go符號
- URI(統一資源識別符號)符號
- SCSS &父選擇器識別符號CSS符號
- Windows安全識別符號(SID)概述Windows符號
- Hibernate識別符號生成器符號
- Java的識別符號與編碼規範Java符號
- 識別符號的命名規則和規範符號
- Android O 讓安裝應用更安全Android
- 1413: C語言合法識別符號C語言符號
- JavaScript生成GUID統一識別符號JavaScriptGUI符號