對于每個版本,我們都致力于使操作系統更智能,更易于使用和更好地執行,并以隱私和安全為核心。在Android 12中,我們還致力于為您提供新工具,以為用戶打造出色的體驗。首先從兼容的媒體轉碼之類的東西開始,這可以幫助您的應用使用最新的視頻格式(如果您尚不支持它們),以及輕松地將豐富的內容(例如圖像和視頻)復制/粘貼到您的應用中。我們還將添加隱私保護并優化性能,以保持應用程序的響應速度。除了我們在Android 12中所做的工作外,本月晚些時候,我們還將在另一個重要工具上分享更多信息,該工具可幫助您更輕松地創建出色的用戶體驗:Jetpack Compose,這是我們用于構建本機UI的現代工具包。
開始
對的,上面是由Android開發者:工程副總裁Dave Burke發布的博客部分內容,從上得知幾個關鍵因素:
- 隱私
- 安全
- 新工具,新體驗
對于用戶來講會有新體驗,更隱私更安全,對于我們開發工作者來講,有新工具。那么這些新的東西都具體體現在哪些方面呢?下面由我帶著大家學習一番。
WebView 加入SameSite Cookie
Android的WebView組件基于Chromium,Chromium是支持Google Chrome瀏覽器的開源項目。而在Chrome瀏覽器加入SameSite之后,現在又加入到了Android 12 的WebView中, SameSite Cookie可以提供更高的安全性和隱私性,并為用戶提供更高的透明度和控制力,具體什么意思呢?請看大佬的文章,它解釋的很清楚,Cookie 的 SameSite 屬性
備份限制
為了保護個人應用程序的數據,Android 12更改了該adb backup命令的默認行為,于是我在Android 12上試了一下下,如圖
第一步
獲取已安裝的應用程序列表
第二步
備份我的應用com.zzy.flutter_to_find_out
第三步
備份數據
請看細節
WARNING: adb backup is deprecated and may be removed in a future release
意思是該功能會被刪除棄用,只是現在還沒有。但官方描述又這么講:如果您的測試或開發工作流程依賴于應用程序數據adb backup,您現在可以通過在應用程序的清單文件中將設置android:debuggable 為true,來選擇導出應用程序的數據,且要注意上線后要改為false來保證應用數據的安全。
android:exported 必須顯式聲明
android:exported 是Android中的四大組件 Activity,Service,Provider,Receiver 四大組件中都會有的一個屬性,作用:是否支持其它應用調用當前組件,默認值:如果包含有intent-filter時為true; 沒有intent-filter時為false,具體就不說明了,都是重復的知識。如果應用沒有為android:exported需要的時間聲明值,Logcat將提供以下錯誤消息:
Targeting S+ (version 10000 and above) requires that an explicit value for \
android:exported be defined when intent filters are present
更安全地處理Intent
為了更加安全地處理PendingIntent,Android 12要求應用為每個PendingIntent顯式聲明一個可變性標志,即FLAG_MUTABLE或FLAG_IMMUTABLE,解釋下:
- PendingIntent.FLAG_MUTABLE 可變、Android 12中新增的標志,作用是讓Intent 在 send 的時候可更改
- PendingIntent.FLAG_IMMUTABLE 不可變、Android 6.0 中添加的標志,作用是讓Intent 在 send 的時候不可更改
如果應用創建一個PendingIntent對象時未設置任何可變性標志,則系統將拋出 IllegalArgumentException,并且Logcat中將顯示以下消息:
PACKAGE_NAME: Targeting S+ (version 10000 and above) requires that one of \
FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if \
some functionality depends on the PendingIntent being mutable, e.g. if \
it needs to be used with inline replies or bubbles.
盡可能創建不可變PendingIntent
val pendingIntent = PendingIntent.getActivity(applicationContext,
REQUEST_CODE, intent,
/* flags */ PendingIntent.FLAG_IMMUTABLE)
那說明時候用可變呢?
- 通知中有直接回復的動作時需要使用
- 使用氣泡中的PendingIntent時 ,氣泡是什么?請看鏈接:https://developer.android.com/guide/topics/ui/bubbles
如果應用創建了可變PendingIntent對象,則強烈建議使用明確的意圖并填寫 ComponentName。這樣,每當另一個應用程序調用PendingIntent并將控制權傳遞回你的應用程序時,你的應用程序中的同一組件終將會啟動。
前臺服務啟動限制
前臺服務是應用程序管理某些用戶任務的重要方式,但是如果過度使用,它們可能會影響性能甚至導致應用程序終止,除少數特殊情況外,Android 12的應用程序將無法在后臺運行時啟動前臺服務。如果應用程序在后臺運行時嘗試啟動前臺服務,則會發生異常(少數特殊情況除外)。那么少數例外是什么呢?答:
JobScheduler加入新的api,setExpedited(true)即可,但這并不是前臺服務,而是可以在不考慮節電或節電等功耗限制的情況下立即運行。
無法從服務或廣播接收者創建通知蹦床
當用戶點擊通知時,最終會啟動與用戶交互的應用組件(Activity、Service、Broadcast等)。這個應用程序組件被稱為通知蹦床。但Android 12 以后將無法從服務或廣播中啟動Activity,看似是個壞消息,其實是為了提高用戶體驗,犧牲開發的行為。以后就只能直接綁定Activity,無法通過服務或廣播啟動,如果你想啟動Activity,那就直接綁定Activity得了。
用于接收內容的統一API
開發者的福音:Android 12引入了新的統一API,可讓您從任何可用來源(剪貼板,鍵盤或拖放)接收豐富的內容。具體效果看下該圖:
[圖片上傳失敗...(image-f959fe-1614908653264)]
可以拖動圖片到聊天中,有點像羅老師掌舵的錘子,當年炙手可熱的一步app,錘子一步app將最近添加/使用的圖片、文件和剪切板內的文字集合在屏幕頂部,錘子一步app將常用應用和聯系人集中于屏幕側邊,通過拖拽即可將信息發送至應用或聯系人。就是這樣的一個功能,Android 12來了,準備好了嗎?希望下次Android 13可以上大爆炸(偷笑)
具體如何使用Api呢?請看鏈接 https://developer.android.com/about/versions/12/features/unified-content-api
兼容的媒體轉碼
Android 12可以自動將設備上記錄的HEVC(H.265)和 HDR(HDR10和HDR10 +)視頻轉碼為AVC(H.264),該格式與標準播放器廣泛兼容。當現代編解碼器可用時,這可以利用它們,而不會犧牲與舊應用程序的兼容性。
有關更多詳細信息
請參見 兼容的媒體轉碼
AVIF圖像支持
Android 12引入了對使用AV1圖像文件格式(AVIF)的圖像的支持。AVIF是用于使用AV1編碼的圖像和圖像序列的容器格式。它利用了來自視頻壓縮的幀內編碼內容。與JPEG等較舊的圖像格式相比,這可以顯著提高相同文件大小的圖像質量。要深入了解這種格式的優勢
請參閱Jake Archibald的博客文章
從音頻產生觸覺效果
Android 12應用程序可以使用手機的振動器從音頻會話中生成觸覺反饋。這為更身臨其境的游戲和音頻體驗提供了機會。例如,觸覺增強的鈴聲可以幫助識別呼叫者,或者駕駛游戲可以模擬崎terrain地形的感覺。
有關 更多信息
請參見HapticGenerator參考文檔
對動畫GIF和WebP的本機ImageDecoder支持
在Android 12中,NDK ImageDecoderAPI已擴展為可以解碼來自動畫GIF和動畫WebP文件格式的圖像中的所有幀和定時數據。在Android 11中引入該API時,該API僅從這些格式的動畫中解碼出第一張圖像。
使用ImageDecoder而不是第三方庫來進一步減小APK的大小, 并從與安全性和性能有關的將來更新中受益。
有關API的更多詳細信息,
請參閱API參考和GitHub上的示例
總結
不負眾望,Android 12終將聽取用戶的改進建議,不斷做出改進及優化,對開發或用戶來說都是一次不錯的升級體驗,上面內容是本人對Android 12比較突出的知識的匯聚,內容主要來自官方文檔,如果錯誤的描述,歡迎提出指教,小的肯定會悉心接受。感謝??。
參考
https://developer.android.com/about/versions/12
https://android-developers.googleblog.com/2021/02/android-12-dp1.html