Android O 中對裝置識別符號所做的變更

谷歌開發者_發表於2017-04-19

640?wx_fmt=gif


640?wx_fmt=jpeg


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 相容性 | NDK 工具集更新須知

召集所有願意搶先體驗Android Studio預覽版的使用者

Android O開發者預覽版終於推出啦!官方介紹新特性


640?wx_fmt=gif點選「閱讀原文」,檢視文內連結640?wx_fmt=gif

相關文章