全部產品
Search
文件中心

Mobile Platform as a Service:mPaaS 適配 targetSdkVersion 28

更新時間:Jul 13, 2024

mPaaS 舊版基準對 targetSdkVersion 最高僅支援到 26。從 10.1.68.21 開始,mPaaS 增加了對 targetSdkVersion 28 的支援。如果您的應用需要將 targetSdkVersion 升級到 28,請使用 mPaaS 外掛程式 將 SDK 更新到 10.1.68.21 或以上版本,並按照下文進行適配和迴歸相關功能。

適配 targetSdkVersion 28

修改 targetSdkVersion

AAR 接入方式

在工程主 module 下的 build.gradle 檔案中修改屬性 targetSdkVersion 28。

Portal & Bundle 接入方式

  • 在 Portal 工程主 module 下的 build.gradle 檔案中修改屬性 targetSdkVersion 28。

  • 在 Bundle 工程中的 targetSdkVersion 可不修改,但不得高於 Portal 工程。

通用配置

AAR 接入方式

修改工程 AndroidManifest.xml,在 application 節點下添加如下代碼:

<uses-library android:name="org.apache.http.legacy" android:required="false"/>

Portal & Bundle 接入方式

修改 Portal 工程 AndroidManifest.xml

  • 在 application 節點下添加如下代碼:

    <uses-library android:name="org.apache.http.legacy" android:required="false"/>
  • 從 LauncherActivity 刪除以下屬性(SDK 已改為通過代碼設定):

    android:screenOrientation="portrait"

其他配置

允許 HTTP 要求

Android 9.0 的網路設定預設禁止了 HTTP 要求,只允許 HTTPS 請求,設定 targetSdkVersion 28 將在 9.0+ 裝置上啟用 9.0 的網路設定。如果您仍然需要發送 HTTP 要求(包括小程式中),可通過配置 networkSecurityConfig 開啟。

  • 在工程(Portal&Bundle 為 Portal 工程)的res/xml 目錄下建立 network_security_config.xml 檔案,內容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
      <base-config cleartextTrafficPermitted="true">
          <trust-anchors>
              <certificates src="system" />
          </trust-anchors>
      </base-config>
    </network-security-config>
  • 在工程(Portal & Bundle 為 Portal 工程)的 AndroidManifest.xml 中的 application 節點添加屬性:

    android:networkSecurityConfig="@xml/network_security_config"

更多配置可參考 Google官方文檔

透明背景 Activity 設定螢幕方向 crash

該適配點為 Android 8.0 系統 bug。在 8.0 裝置上,當應用 targetSdkVersion > 26 時,透明背景的 Activity 如果設定了螢幕方向,開啟該 Activity 就會觸發 crash。觸發具體條件為:

  • Activity 使用的 theme 中 windowIsTranslucentwindowIsFloating 屬性為 true

  • AndroidManifest.xml 中設定了 screenOrientation 屬性,或調用了 setRequestedOrientation 方法。

您需要檢查所有 Activity 是否滿足觸發條件,同時除了您自訂的 style 外,請注意部分常用的系統 theme 也滿足條件,例如:

@android:style/Theme.Translucent.NoTitleBar
@android:style/Theme.Dialog

推薦適配方式:

  1. 對於 theme 滿足條件的 Activity,刪除 AndroidManifest.xml 中的 screenOrientation 屬性,改為調用 setRequestedOrientation 方法。

  2. 在對應 Activity 或父類中重寫 setRequestedOrientation 方法,try catch super.setRequestedOrientation() 兜底:

     @Override
     public void setRequestedOrientation(int requestedOrientation) {
         try {
             super.setRequestedOrientation(requestedOrientation);
         } catch (Exception ignore) {
    
         }
     }
  3. mPaaS 提供的 BaseActivityBaseFragmentActivityBaseAppCompatActivtiy 均已重寫 setRequestedOrientation 方法兜底。

  4. 完成上述適配後,雖可避免 crash,但仍可能出現在 Android 8.0 裝置上鎖定方向失效的情況,請確保您的 Activity 不會因旋轉螢幕發生異常(例如重走生命週期導致某些成員變數為空白)。

Android 8.0 系統相關源碼:

android 8.0 bug

迴歸測試

全量迴歸測試的裝置中必須包含 Android 9.0 以上版本的裝置,同時對於透明背景 Activity 設定螢幕方向 crash 問題,請在 Android 8.0 機型上專項測試。

迴歸測試中您需要重點關注以下組件功能(如果使用):

組件

驗證專案

移動網關

掃一掃

  • 標準 UI 掃碼是否成功。

  • 標準 UI 開啟手機相簿、拍照及預覽是否正常。

  • 自訂 UI 掃碼是否成功,如自訂 UI,需要 適配部分新介面

統一儲存

分享

分享到新浪微博、QQ 是否成功。