mPaaS 适配 targetSdkVersion 28

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"

更多配置可参考 谷歌官方文档

透明背景 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 是否成功。