1. 程式人生 > >Android 9 Pie 兼容性常見問題及註意事項

Android 9 Pie 兼容性常見問題及註意事項

sde 服務 分享 場景 schedule 使用 運行時 函數調用 rman

技術分享圖片

應用不兼容的常見原因

使用了系統的 ClassLoader 加載 org.apache.http.* 的庫

Android M 就已經開始移除對 Apache HTTP client 的支持。而 Android P 的系統 ClassLoader 已經不支持加載 org.apache.http.*包 (拋出 NoClassDefFoundError),應用必須用自定義的 ClassLoader 來加載,同時確保 org.apache.http.* 的路徑包含在應用 classpath 上。

應用不應該再使用 org.apache.http.legacy 庫,如果實在必須,可以將它打包進自己的 APK,同時改名以防止與運行時的版本沖突。

沒有使用兼容 Android 9 的加固服務

部分加固服務可能尚未兼容 Android 9。開發者應該使用兼容 Android 9 的加固服務。

直接調用 dex2oat

從一開始,dex2oat 就被設計為系統內部使用的編譯部署工具,Android 從來都未支持過開發者直接調用 dex2oat 的場景。

如果您需要從內存中加載 dex 文件,而不願在存儲中留下痕跡,請使用 Android O 中新增的加載器 InMemoryDexClassLoader。

相關的 dex / so 文件亦不應直接操作或篡改,幹擾或篡改系統內部加載 dex 的邏輯很可能會導致兼容性問題。

使用了非 SDK 接口

非 SDK 接口在每次版本更新中都有可能被改動,開發者應只使用 SDK 接口。

使用了不兼容的第三方的庫

如果您使用的第三方庫尚不支持 Android P 版本,請報告給其提供商,幫助推動它解決兼容性問題。

非 SDK 接口的限制名單

凹口屏幕 Display Cutout

屏幕旋轉鎖定

在 Android P 上,不論是自動旋轉或旋轉鎖定 (rotation lock),應用界面皆可以為縱向或橫向,這取決於最上層可見 Activity 的 screenOrientation 設置。請不要再假設設備在旋轉鎖定時必定為縱向。

Inline 函數調用檢查

在 Android P 中,如果調用某個 inline 方法的類與 inline 方法所在的類由不同的 ClassLoader 加載, 就會主動發起 abort (inline 不允許跨 dex 文件),導致應用 crash。請盡量避免用不同的 ClassLoader 來加載相關的 (有互相調用可能) 類,因為被調用類的方法可能已經被 inline 了。

空閑應用無法訪問麥克風、攝像頭和傳感器

為了更好地保證隱私,Android P 限制所有處於空閑狀態的應用對麥克風、攝像頭和所有 SensorManager 傳感器的訪問。當一個應用的 UID 空閑時,麥克風將會報告系統 “無音頻信號”,傳感器將會停止報告事件。應用使用的攝像頭也會斷開連接,如果應用嘗試使用它們,則會生成錯誤。在大多數情況下,這些限制不會為現有應用帶來新的問題,但我們仍然建議您從應用中移除此類傳感器請求。

前臺服務權限

應用 target 到 P 版本後,在使用前臺服務時必須申請 FOREGROUND_SERVICE 權限。這是一個一般性權限,應用只需在 manifest 中聲明,系統會自動授予而無需詢問用戶。但若無此權限即運行前臺服務,系統會拋出 SecurityException。

後臺服務限制

自 Oreo 起,Target SDK >=26 的應用若沒有在前臺顯示,它的後臺服務將受到系統限制。需長期運行的服務應遷移至前臺服務,並讓使用者註意到服務正在運行;經典電影或改用排程作業,例如 WorkManager 或 JobScheduler。

Google Play targetSdkVersion 政策

為了推動應用獲得 Android 新版本提供的安全和性能提升,Google Play 應用市場要求其上的應用必須:

?點擊屏末?|?閱讀原文?|?"我們願意更好地傾聽您的聲音 "

技術分享圖片

推薦閱讀

·?Android 安全更新的發展與沿革

·?Android Jetpack: Room | 中文教學視頻

·?Google Play Console 新增獲客分析功能,幫您深入洞察用戶行為


文章來源:https://blog.csdn.net/jILRvRTrc/article/details/82598481

Android 9 Pie 兼容性常見問題及註意事項