1. 程式人生 > >如何將應用完美遷移至Android P版本

如何將應用完美遷移至Android P版本

vid 升級 .com ast 權限 兼容 orm one 啟動

Android P(API 級別 P)引入了行為變更以及您的應用中可加以利用的新功能和 API。本文概述了將應用遷移到 Android P 的兩個關鍵階段的步驟:

1、確保兼容 Android P

驗證您的應用能夠在新版本平臺上全功能運行。在此階段,您不需要使用新的 API,也不需要更改應用的 targetSdkVersion,但可能需要進行一些細微的更改。

2、更新您的目標版本並使用 Android P 功能

當您準備好利用平臺的新功能時,將targetSdkVersion更新至“P”,驗證應用是否仍可按預期方式運行,然後開始使用新的 API。

技術分享圖片

Android P升級計劃

確保兼容 Android P

此處的目標是確保您的現有應用在 Android P(API 級別 P)上照常運行。由於一些平臺變化可能影響應用的行為方式,因此可能需要進行一些調整,但您不需要使用新的 API 或更改 targetSdkVersion。

技術分享圖片

技術分享圖片

準備一臺運行 Android P 的設備

如果您有一臺兼容設備(Pixel、Pixel XL、Pixel 2、Pixel 2XL),請從官網獲取適合您的設備的Android P系統映像,然後按照說明將映像刷入設備。

執行兼容性測試

與 Android P(API級別P)的兼容性測試多半與您準備發布應用時執行的測試屬於同一類型。

不過,測試還有另一個層面:Android P 向 Android平臺引入了一些變化,即便不對 targetSdkVersion 做任何變動,仍可能影響應用的行為或令其根本無法運行。因此,您必須回顧下表中的關鍵變化,並對任何為適應這些變化而實現的修復進行測試。

  • 對於非 SDK 接口的限制

現已禁止訪問特定的非 SDK 接口,無論是直接訪問,還是通過 JNI 或反射進行間接訪問。嘗試訪問受限制的接口將會生成 NoSuchFieldException 和 NoSuchMethodException 之類的錯誤。有關詳情,請參閱對於非 SDK 接口的限制。

  • 移除加密提供程序

從 Android P 開始,Crypto JCA 提供程序現已被移除。調用 SecureRandom.getInstance("SHA1PRNG", "Crypto") 將會引發 NoSuchProviderException。

  • 更嚴格的 UTF-8 解碼器

在 Android P 中,針對 Java 語言的 UTF-8 解碼器比以往更嚴格,並且遵循 Unicode 標準。

  • 禁止空閑應用訪問攝像頭、麥克風和傳感器

在應用處於空閑狀態時,不能再訪問攝像頭、麥克風或 SensorManager 傳感器。

測試 Android P 應用

完成以上準備工作後,您就可以構建應用,然後對其做進一步測試,以確保 Android P(API 級別 P)為目標平臺時它能正常工作。這時有必要再次回顧一下核心應用質量指南和測試最佳實踐。

如果您構建應用時將 targetSdkVersion設置為P,應該註意特定的平臺變化。即便您不實現 Android P 中的新功能,其中的一些變化仍可能嚴重影響應用的行為或令其根本無法運行。

  • 前臺服務權限

現在,想要使用前臺服務的應用必須首先請求 FOREGROUND_SERVICE 權限。這是普通權限,因此,系統會自動為請求權限的應用授予此權限。在未獲得此權限的情況下啟動前臺服務將會引發 SecurityException。

  • 棄用 Bouncy Castle 加密

Android P 棄用了幾個來自 Bouncy Castle 提供程序中的加密技術,代之以由 Conscrypt 提供程序提供的加密技術。調用請求 Bouncy Castle 提供程序的 getInstance() 將會生成 NoSuchAlgorithmException 錯誤。要解決這些錯誤,請不要在 getInstance() 中指定提供程序(也就是請求默認實現)。

  • 移除對 Build.serial 的直接訪問

現在,需要 Build.serial 標識符的應用必須請求 READ_PHONE_STATE 權限,然後使用 Android P 中新增的新 Build.getSerial() 函數。

  • 不允許共享 WebView 數據目錄

現在,不允許應用在不同進程之間共享一個 WebView 數據目錄。如果您的應用有多個進程使用 WebView、CookieManager 或 android.webkit 軟件包中的任何其他 API,則在第二個進程調用 WebView 函數時,您的應用將會崩潰。

  • SELinux 禁止訪問應用的數據目錄

系統強制每個應用的 SELinux 沙盒對每個應用的私有數據目錄強制執行逐個應用的 SELinux 限制。現在,不允許直接通過路徑訪問其他應用的數據目錄。應用可以繼續使用進程間通信 (IPC) 機制(包括通過傳遞 FD)共享數據。

兼容性解決方案

如果您沒有支持安卓P版本的兼容設備,可訪問華為終端開放實驗室雲測平臺,免費獲取Pixel的使用權。

平臺擁有一套完善的移動應用DevOps解決方案,在谷歌IO大會之後,率先上線Android P DP2版本的Pixel機型,免費提供給安卓綠色聯盟會員使用。

在谷歌官方的解決方案基礎上,從11項中測試並解決安卓P版本兼容性。

技術分享圖片

如何將應用完美遷移至Android P版本