近日,Google釋出了新系統 Android 12 的首個開發者預覽版。根據谷歌官方消息,最終版本的Android 12預計于今年下半年正式上線。此次釋出預覽版的目的主要是幫助開發者提前了解Android 12的新變化,為後續進行應用适配提前做準備。
作為陪伴開發者多年的重要夥伴,個推一直密切關注和跟進行業發展趨勢。在Android12首個開發者預覽版釋出後,個推快速對新系統的有關更新展開了調研。本文對Android 12預覽版的部分新功能、新特性進行了解讀,希望能幫助廣大開發者對新系統有個快速了解。Android 12行為變更:面向所有應用
使用者體驗更新
沉浸式手勢導航改進
從Android 10 開始,Android 系統就已支援手勢導航,緻力于給使用者帶來沉浸式的全新體驗。在之前版本的系統下,使用者啟動安卓的沉浸模式,預設需要的手勢操作是:從螢幕側方滑入,退出沉浸模式,然後再傳回上一個界面。最新釋出的Android 12首個開發者預覽版則對手勢導航模式進行了簡化:使用者不再需要滑動兩次,隻需一次滑動手勢,即可退出全屏沉浸模式并傳回上個界面,更加高效和便利。
隐私/安全保護增強
MAC 位址權限限制
為進一步保護使用者隐私和資料安全,Android 11引入了“單次授權”“權限自動重置”“分區存儲”等功能。Android 12則更進一步限制了所有非系統應用程式對裝置MAC位址的通路,無論目标API級别如何。
相關API傳回空值或占位符值,具體取決于應用程式的目标SDK版本:
➀ target = 12 ,傳回 null
➁ target <12 ,傳回 02:00:00:00:00:00
未被信任的觸摸事件将被阻止
為了保護系統安全和更好的使用者體驗,Android 12将會阻止某些視窗的觸摸。
例如:
➀ 申請了 SYSTEM_ALERT_WINDOW 權限的 windows
➁ Toast messages
應用不能關閉系統對話框
ACTION_CLOSE_SYSTEM_DIALOGS intent 在 Android 12 被廢棄。
➀ target = 12, 将抛出 SecurityException 異常
➁ target < 12 ,該 intent 不會執行,會在 logcat 列印警告日志:
E ActivityTaskManager Permission Denial: \
android.intent.action.CLOSE_SYSTEM_DIALOGS broadcast from \
com.package.name requires android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS, \
dropping broadcast.
Android 12行為變更:針對Target = 12的應用
自定義通知欄
Android 12 開發者預覽版對通知欄進行了更改。圖左:Android 12 開發者預覽版,圖右:Android 11
之前,開發者能自定義整個通知欄區域的布局和樣式,這就導緻了不同裝置的相容适配問題以及使用者的浏覽不适應問題。
Android 12更改了完全自定義通知的外觀。對于 target = 12 的應用,在通知欄的消息展示均使用統一的模闆。上面應用名字顯示和折疊按鈕都是相同的、固定的,下面折疊和展開狀态呈現的區域是可自定義的:
折疊和展開的樣式:
折疊狀态
展開狀态
若APP中存在自定義Notification.Style,亦或是使用了Notification.Builder中 setCustomContentView(RemoteViews), setCustomBigContentView(RemoteViews)和setCustomHeadsUpContentView(RemoteViews)方法,可能會受此影響。
隐私/安全
WebView 中的SameSite cookie行為
Android的WebView元件基于Chromium來提高安全性和隐私性,去年,Chromium對第三方Cookie的處理方式進行了更改,并已面向衆多Chrome使用者推出。從Android 12開始,這些更改将應用于WebView。
SameSitecookie的屬性控制它是否可以與任何請求一起發送,還是隻能與相同站點的請求一起發送。Android 12中的WebView基本版本(版本89.0.4385.0)改進了第三方Cookie的預設處理,将有助于防止意外的跨站點共享。
ADB backup 限制
Android 12 限制了 adb backup 指令行的預設行為 (該指令行是用來備份恢複資料的),對應用程式資料adb backup有依賴的開發者可以在清單檔案中設定 android:debuggable 為 true。
元件需要添加 exported 配置
target=12時,使用的activity 、service或者廣播有用到 intent filters ,則需聲明 android:exported 屬性。不配置的話,在安卓 12 裝置上将不能安裝,logcat 也會列印錯誤日志:
Targeting S+ (version 10000 and above) requires that an explicit value for \
android:exported be defined when intent filters are present
Pending intents 必須聲明意圖
使用 PendingIntent 需要聲明 PendingIntent.FLAG_MUTABLE 或者 PendingIntent.FLAG_IMMUTABLE flag,否則系統會抛出異常 IllegalArgumentException。
性能
前台服務啟動限制
以 Android 12 為目标的應用程式,無法在背景運作時啟動前台服務,應用程式在背景運作時,可考慮使用 WorkManager 執行任務。
ForegroundService通知延遲
前台服務啟動後必須調用startForeground() 來顯示前台通知,如果應用在5s内未調用 startForeground(),則系統将停止服務并聲明此應用為 ANR。
在Android 12中,限制時間由5s改為了10s。這樣一來,對于部分APP來講,将會有更充分的處理時間。
通知跳轉
services 或者 broadcast receivers 中建立的通知将不能調用 startActivity() !!!
logcat 會列印:
Indirect notification activity start (trampoline) from PACKAGE_NAME, \this should be avoided for performance reasons.
總結
以上,是個推對Android 12首個開發者預覽版本中幾個重要更新點的解讀。
除了以上内容外,Android 12 預覽版還在視訊、音頻和圖檔處理方面做了很多有趣的更新。比如,通過手機的振動馬達增加對觸覺耦合音頻效果的支援,可以幫助遊戲類APP提升玩家體驗;引入了相容媒體轉碼功能,可以讓那些不支援 HEVC的應用,也能将檔案高效轉碼為 AVC 格式;同時還引入了對 AV1 圖像檔案格式(AVIF)的支援,使得開發者可以同樣的檔案大小,收獲比 JPEG 圖像更高的圖像品質……感興趣的開發者可以進入Android 12官網進一步詳細了解。
圖檔
https://developer.android.google.cn/about/versions/12後續,個推還将在持續打磨開發者服務和SDK産品的同時,密切跟進移動開發領域的相關動态,為開發者更新産品功能、疊代服務體驗提供有效建議。
也歡迎更多的開發者和我們一起交流和探索Android及移動開發新技術,共同建設更好的安卓開發生态。
*本文圖檔來源于Android官網