google 收縮權(quán)限以及規(guī)范apk 運行時狀態(tài)扩劝,意味著google 的 Android 系統(tǒng)將更加規(guī)范江滨,將有效打擊各種使用黑科技的 app铛纬。正是這些所謂的黑科技,一定程度上唬滑,影響手機流暢及侵犯用戶隱私告唆。但也正是這些黑科技,android 的世界才多姿多彩晶密。
針對所有應(yīng)用的變更
TLS 1.3
默認開啟 TLS 1.3
但是不支持 0-RTT
模式
不再信任 SHA-1
簽名的證書
但目前大多數(shù) https
已經(jīng)不再使用這類簽名了
SYSTEM_ALERT_WINDOW 權(quán)限
只在 google 輕量級系統(tǒng)上有限制擒悬,故對一般應(yīng)用來說沒有影響
已經(jīng)獲取的還可以繼續(xù)使用,但后面不允許再獲取該權(quán)限
此權(quán)限用來全局顯示懸浮窗稻艰,一些屏幕返回鍵懂牧,home 虛擬鍵將受到影響
舊版 Android 系統(tǒng)為目標(biāo)平臺的應(yīng)用的警告
現(xiàn)在將 target api 設(shè)置在 22 以規(guī)避權(quán)限請求不再可行了
在搭載 Android 10 或更高版本的設(shè)備上,如果用戶首次運行以 Android 5.1(API 級別 22)或更低版本為目標(biāo)平臺的應(yīng)用尊勿,則會看到警告僧凤。如果此應(yīng)用要求用戶授予權(quán)限,則系統(tǒng)會先向用戶提供調(diào)整應(yīng)用權(quán)限的機會元扔,然后才會允許此應(yīng)用首次運行躯保。
如果打開應(yīng)用彈出警告頁面,顯然體驗不友好
android.preference 庫已棄用
從 Android 10 開始澎语,將棄用 android.preference 庫途事。開發(fā)者應(yīng)該改為使用 AndroidX preference 庫,這是 Android Jetpack 的一部分擅羞。如需獲取其他有助于遷移和開發(fā)的資源尸变,請查看經(jīng)過更新的設(shè)置指南以及我們的公開示例應(yīng)用和參考文檔。
一般來說應(yīng)用內(nèi)部都封裝了
Preference
攝像頭變更
很多使用攝像頭的應(yīng)用都會假定如果設(shè)備采用縱向配置减俏,則物理設(shè)備也會處于縱向振惰,正如攝像頭方向中所述。在過去可以做出這樣的假定垄懂,但隨著可用的設(shè)備類型(例如可折疊設(shè)備)的擴展,這一情況發(fā)生了變化痛垛。針對這些設(shè)備做出這樣的假定可能導(dǎo)致相機取景器的顯示產(chǎn)生錯誤的旋轉(zhuǎn)和/或縮放草慧。
以 API 級別 24 或更高級別為目標(biāo)平臺的應(yīng)用應(yīng)該明確設(shè)置 android:resizeableActivity,并提供必要的功能來處理多窗口操作匙头。
Android Beam 已棄用
在 Android 10 中漫谷,我們正式棄用了 Android Beam,這是一項舊版功能蹂析,可通過近距離無線通信 (NFC) 在多個設(shè)備之間啟動數(shù)據(jù)共享舔示。我們還棄用了一些相關(guān)的 NFC API碟婆。Android Beam 仍可供需要的設(shè)備制造商合作伙伴使用,但它已不再處于積極的開發(fā)階段惕稻。不過竖共,Android 仍將繼續(xù)支持其他的 NFC 功能和 API,并且從標(biāo)簽和付款中讀取數(shù)據(jù)等使用場景仍將繼續(xù)按預(yù)期執(zhí)行俺祠。
以API 29+ 為目標(biāo)平臺的應(yīng)用
移除了應(yīng)用主目錄的執(zhí)行權(quán)限
以 Android 10 為目標(biāo)平臺的不可信應(yīng)用無法再針對應(yīng)用主目錄中的文件調(diào)用 exec()
公给。這種從可寫應(yīng)用的主目錄執(zhí)行文件的行為違反了 W^X
。應(yīng)用應(yīng)該僅加載嵌入到應(yīng)用的 APK 文件中的二進制代碼蜘渣。
此外淌铐,以 Android 10 為目標(biāo)平臺的應(yīng)用無法針對已通過 dlopen()
打開的文件中的可執(zhí)行代碼進行內(nèi)存中修改。這包括含有文本重定位的所有共享對象 (.so) 文件蔫缸。
意味著獲取無法動態(tài)加載
so
庫文件
Android 運行時只接受系統(tǒng)生成的 OAT 文件 && 在 ART 中強制要求 AOT 正確性
Android 運行時 (ART) 不再從應(yīng)用進程調(diào)用 dex2oat腿准。這項變更意味著 ART 將僅接受系統(tǒng)生成的 OAT 文件。
只接受系統(tǒng)生成的 OAT 文件拾碌,意味著會影響一些熱更新框架
針對全屏 Intent 的權(quán)限變更
如果應(yīng)用以 Android 10 或更高版本為目標(biāo)平臺并使用涉及全屏 intent 的通知吐葱,則必須在應(yīng)用的清單文件中請求 USE_FULL_SCREEN_INTENT 權(quán)限。這是普通權(quán)限倦沧,因此唇撬,系統(tǒng)會自動為請求權(quán)限的應(yīng)用授予此權(quán)限。
如果以 Android 10 或更高版本為目標(biāo)平臺的應(yīng)用嘗試創(chuàng)建使用全屏 intent 的通知而未請求必要權(quán)限展融,則系統(tǒng)會忽略此全屏 intent 并輸出以下日志消息:
Package your-package-name: Use of fullScreenIntent requires the USE_FULL_SCREEN_INTENT permission
java.io.FileChannel.map() 更改
從 Android 10 開始窖认,非標(biāo)準(zhǔn)文件(例如 /dev/zero,其大小無法使用 truncate() 進行更改)已不再支持 FileChannel.map()告希。之前的 Android 版本會生吞掉 truncate() 返回的錯誤扑浸,但 Android 10 會拋出 IOException。如果您需要舊行為燕偶,則必須使用原生代碼喝噪。
分區(qū)存儲
分區(qū)存儲暫時對 target 28 一下應(yīng)用不生效
為了讓用戶更好地管理自己的文件并減少混亂,以 Android 10(API 級別 29)及更高版本為目標(biāo)平臺的應(yīng)用在默認情況下被賦予了對外部存儲設(shè)備的分區(qū)訪問權(quán)限(即分區(qū)存儲)指么。此類應(yīng)用只能看到本應(yīng)用專有的目錄(通過 Context.getExternalFilesDir() 訪問)以及特定類型的媒體酝惧。除非您的應(yīng)用需要訪問存放在應(yīng)用的專有目錄以及 MediaStore 之外的文件,否則最好使用分區(qū)存儲伯诬。