對于每個版本迹恐,我們都致力于使操作系統(tǒng)更智能作瞄,更易于使用和更好地執(zhí)行,并以隱私和安全為核心巧勤。在Android 12中拳氢,我們還致力于為您提供新工具享钞,以為用戶打造出色的體驗船万。首先從兼容的媒體轉(zhuǎn)碼之類的東西開始街立,這可以幫助您的應(yīng)用使用最新的視頻格式(如果您尚不支持它們),以及輕松地將豐富的內(nèi)容(例如圖像和視頻)復(fù)制/粘貼到您的應(yīng)用中什湘。我們還將添加隱私保護并優(yōu)化性能长赞,以保持應(yīng)用程序的響應(yīng)速度。除了我們在Android 12中所做的工作外禽炬,本月晚些時候涧卵,我們還將在另一個重要工具上分享更多信息勤家,該工具可幫助您更輕松地創(chuàng)建出色的用戶體驗:Jetpack Compose腹尖,這是我們用于構(gòu)建本機UI的現(xiàn)代工具包。
開始
對的伐脖,上面是由Android開發(fā)者:工程副總裁Dave Burke發(fā)布的博客部分內(nèi)容热幔,從上得知幾個關(guān)鍵因素:
- 隱私
- 安全
- 新工具,新體驗
對于用戶來講會有新體驗讼庇,更隱私更安全绎巨,對于我們開發(fā)工作者來講,有新工具蠕啄。那么這些新的東西都具體體現(xiàn)在哪些方面呢场勤?下面由我?guī)е蠹覍W習一番戈锻。
WebView 加入SameSite Cookie
Android的WebView組件基于Chromium,Chromium是支持Google Chrome瀏覽器的開源項目和媳。而在Chrome瀏覽器加入SameSite之后格遭,現(xiàn)在又加入到了Android 12 的WebView中, SameSite Cookie可以提供更高的安全性和隱私性留瞳,并為用戶提供更高的透明度和控制力拒迅,具體什么意思呢?請看大佬的文章她倘,它解釋的很清楚璧微,Cookie 的 SameSite 屬性
備份限制
為了保護個人應(yīng)用程序的數(shù)據(jù),Android 12更改了該adb backup命令的默認行為硬梁,于是我在Android 12上試了一下下前硫,如圖
第一步
獲取已安裝的應(yīng)用程序列表
第二步
備份我的應(yīng)用com.zzy.flutter_to_find_out
第三步
備份數(shù)據(jù)
請看細節(jié)
WARNING: adb backup is deprecated and may be removed in a future release
意思是該功能會被刪除棄用,只是現(xiàn)在還沒有荧止。但官方描述又這么講:如果您的測試或開發(fā)工作流程依賴于應(yīng)用程序數(shù)據(jù)adb backup开瞭,您現(xiàn)在可以通過在應(yīng)用程序的清單文件中將設(shè)置android:debuggable 為true,來選擇導(dǎo)出應(yīng)用程序的數(shù)據(jù)罩息,且要注意上線后要改為false來保證應(yīng)用數(shù)據(jù)的安全嗤详。
android:exported 必須顯式聲明
android:exported 是Android中的四大組件 Activity,Service瓷炮,Provider葱色,Receiver 四大組件中都會有的一個屬性,作用:是否支持其它應(yīng)用調(diào)用當前組件娘香,默認值:如果包含有intent-filter時為true; 沒有intent-filter時為false苍狰,具體就不說明了,都是重復(fù)的知識烘绽。如果應(yīng)用沒有為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要求應(yīng)用為每個PendingIntent顯式聲明一個可變性標志安接,即FLAG_MUTABLE或FLAG_IMMUTABLE翔忽,解釋下:
- PendingIntent.FLAG_MUTABLE 可變、Android 12中新增的標志盏檐,作用是讓Intent 在 send 的時候可更改
- PendingIntent.FLAG_IMMUTABLE 不可變歇式、Android 6.0 中添加的標志,作用是讓Intent 在 send 的時候不可更改
如果應(yīng)用創(chuàng)建一個PendingIntent對象時未設(shè)置任何可變性標志胡野,則系統(tǒng)將拋出 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.
盡可能創(chuàng)建不可變PendingIntent
val pendingIntent = PendingIntent.getActivity(applicationContext,
REQUEST_CODE, intent,
/* flags */ PendingIntent.FLAG_IMMUTABLE)
那說明時候用可變呢?
- 通知中有直接回復(fù)的動作時需要使用
- 使用氣泡中的PendingIntent時 硫豆,氣泡是什么龙巨?請看鏈接:https://developer.android.com/guide/topics/ui/bubbles
如果應(yīng)用創(chuàng)建了可變PendingIntent對象笼呆,則強烈建議使用明確的意圖并填寫 ComponentName。這樣旨别,每當另一個應(yīng)用程序調(diào)用PendingIntent并將控制權(quán)傳遞回你的應(yīng)用程序時抄邀,你的應(yīng)用程序中的同一組件終將會啟動。
前臺服務(wù)啟動限制
前臺服務(wù)是應(yīng)用程序管理某些用戶任務(wù)的重要方式昼榛,但是如果過度使用境肾,它們可能會影響性能甚至導(dǎo)致應(yīng)用程序終止,除少數(shù)特殊情況外胆屿,Android 12的應(yīng)用程序?qū)o法在后臺運行時啟動前臺服務(wù)奥喻。如果應(yīng)用程序在后臺運行時嘗試啟動前臺服務(wù),則會發(fā)生異常(少數(shù)特殊情況除外)非迹。那么少數(shù)例外是什么呢环鲤?答:
JobScheduler加入新的api,setExpedited(true)即可憎兽,但這并不是前臺服務(wù)冷离,而是可以在不考慮節(jié)電或節(jié)電等功耗限制的情況下立即運行。
無法從服務(wù)或廣播接收者創(chuàng)建通知蹦床
當用戶點擊通知時纯命,最終會啟動與用戶交互的應(yīng)用組件(Activity西剥、Service、Broadcast等)亿汞。這個應(yīng)用程序組件被稱為通知蹦床瞭空。但Android 12 以后將無法從服務(wù)或廣播中啟動Activity,看似是個壞消息疗我,其實是為了提高用戶體驗咆畏,犧牲開發(fā)的行為。以后就只能直接綁定Activity吴裤,無法通過服務(wù)或廣播啟動旧找,如果你想啟動Activity,那就直接綁定Activity得了麦牺。
用于接收內(nèi)容的統(tǒng)一API
開發(fā)者的福音:Android 12引入了新的統(tǒng)一API钮蛛,可讓您從任何可用來源(剪貼板,鍵盤或拖放)接收豐富的內(nèi)容枕面。具體效果看下該圖:
[圖片上傳失敗...(image-f959fe-1614908653264)]
可以拖動圖片到聊天中愿卒,有點像羅老師掌舵的錘子缚去,當年炙手可熱的一步app潮秘,錘子一步app將最近添加/使用的圖片、文件和剪切板內(nèi)的文字集合在屏幕頂部易结,錘子一步app將常用應(yīng)用和聯(lián)系人集中于屏幕側(cè)邊枕荞,通過拖拽即可將信息發(fā)送至應(yīng)用或聯(lián)系人柜候。就是這樣的一個功能,Android 12來了躏精,準備好了嗎渣刷?希望下次Android 13可以上大爆炸(偷笑)
具體如何使用Api呢?請看鏈接 https://developer.android.com/about/versions/12/features/unified-content-api
兼容的媒體轉(zhuǎn)碼
Android 12可以自動將設(shè)備上記錄的HEVC(H.265)和 HDR(HDR10和HDR10 +)視頻轉(zhuǎn)碼為AVC(H.264)辅柴,該格式與標準播放器廣泛兼容。當現(xiàn)代編解碼器可用時瞭吃,這可以利用它們碌嘀,而不會犧牲與舊應(yīng)用程序的兼容性股冗。
有關(guān)更多詳細信息
請參見 兼容的媒體轉(zhuǎn)碼
AVIF圖像支持
Android 12引入了對使用AV1圖像文件格式(AVIF)的圖像的支持。AVIF是用于使用AV1編碼的圖像和圖像序列的容器格式怯疤。它利用了來自視頻壓縮的幀內(nèi)編碼內(nèi)容旅薄。與JPEG等較舊的圖像格式相比泣崩,這可以顯著提高相同文件大小的圖像質(zhì)量少梁。要深入了解這種格式的優(yōu)勢
請參閱Jake Archibald的博客文章
從音頻產(chǎn)生觸覺效果
Android 12應(yīng)用程序可以使用手機的振動器從音頻會話中生成觸覺反饋。這為更身臨其境的游戲和音頻體驗提供了機會矫付。例如凯沪,觸覺增強的鈴聲可以幫助識別呼叫者,或者駕駛游戲可以模擬崎terrain地形的感覺买优。
有關(guān) 更多信息
請參見HapticGenerator參考文檔
對動畫GIF和WebP的本機ImageDecoder支持
在Android 12中妨马,NDK ImageDecoderAPI已擴展為可以解碼來自動畫GIF和動畫WebP文件格式的圖像中的所有幀和定時數(shù)據(jù)。在Android 11中引入該API時杀赢,該API僅從這些格式的動畫中解碼出第一張圖像烘跺。
使用ImageDecoder而不是第三方庫來進一步減小APK的大小, 并從與安全性和性能有關(guān)的將來更新中受益脂崔。
有關(guān)API的更多詳細信息滤淳,
請參閱API參考和GitHub上的示例
總結(jié)
不負眾望,Android 12終將聽取用戶的改進建議砌左,不斷做出改進及優(yōu)化脖咐,對開發(fā)或用戶來說都是一次不錯的升級體驗铺敌,上面內(nèi)容是本人對Android 12比較突出的知識的匯聚,內(nèi)容主要來自官方文檔屁擅,如果錯誤的描述偿凭,歡迎提出指教,小的肯定會悉心接受派歌。感謝??弯囊。
參考
https://developer.android.com/about/versions/12
https://android-developers.googleblog.com/2021/02/android-12-dp1.html