全部产品

适配 targetSdkVersion 28

更新时间:2020-10-16 16:25:39

背景

mPaaS 标准基线对 targetSdkVersion 最高仅支持到 26。如果您的应用需要将 targetSdkVersion 升级到 28,请使用定制基线 10.1.68a,并按照下文更新 SDK 和添加配置,并回归相关功能。

说明:10.1.68a 基线虽已通过测试,但目前仍处在 beta 阶段,请谨慎使用。

更新 SDK

参考 mPaaS 支持多 CPU 架构 更新 SDK 及相关配置。

适配 targetSdkVersion 28

修改 targetSdkVersion

Inside/AAR

在工程主 module 下的 build.gradle 文件中修改属性 targetSdkVersion 28。

Portal&Bundle

  • 在 Portal 工程主 module 下的 build.gradle 文件中修改属性 targetSdkVersion 28。
  • 在 Bundle 工程中的 targetSdkVersion 可不修改,但不得高于 Portal 工程。

通用配置

Inside/AAR

修改工程 AndroidManifest.xml,在 application 节点下添加如下代码:

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

Portal&Bundle

修改 Portal 工程 AndroidManifest.xml

  • 在 application 节点下添加如下代码:
    1. <uses-library android:name="org.apache.http.legacy" android:required="false"/>
  • 从 LauncherActivity 删除以下属性(SDK 已改为通过代码设置):
    1. 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 文件,内容如下:
    1. <?xml version="1.0" encoding="utf-8"?>
    2. <network-security-config>
    3. <base-config cleartextTrafficPermitted="true">
    4. <trust-anchors>
    5. <certificates src="system" />
    6. </trust-anchors>
    7. </base-config>
    8. </network-security-config>
  • 在工程(Portal&Bundle 为 Portal 工程)的 AndroidManifest.xml 中的 application 节点添加属性:
    1. 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 也满足条件,例如:

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

推荐适配方式:

  1. 对于 theme 满足条件的 Activity,删除 AndroidManifest.xml 中的 screenOrientation 属性,改为调用 setRequestedOrientation 方法。
  2. 在对应 Activity 或父类中重写 setRequestedOrientation 方法,try catch super.setRequestedOrientation() 兜底:

    1. @Override
    2. public void setRequestedOrientation(int requestedOrientation) {
    3. try {
    4. super.setRequestedOrientation(requestedOrientation);
    5. } catch (Exception ignore) {
    6. }
    7. }
  3. mPaaS 提供的 BaseActivityBaseFragmentActivityBaseAppCompatActivtiy 均已重写 setRequestedOrientation 方法兜底。
  4. 完成上述适配后,虽可避免 crash,但仍可能出现在8.0设备上锁定方向失效的情况,请确保您的 Activity 不会因旋转屏幕发生异常(例如重走生命周期导致某些成员变量为空)。

Android 8.0 系统相关源码:

android 8.0 bug

回归测试

全量回归测试的设备中必须包含 Android 9.0+设备,同时对于透明背景 Activity 设置屏幕方向 crash问题,请在 Android 8.0 机型上专项测试。

回归测试中您需要重点关注以下组件功能(如果使用):

组件 验证项目
移动网关 - 开启 签名校验 后,RPC调用是否成功。
- 开启 数据加密 后,RPC调用是否成功。
热修复
- 热修复 是否能够生效。
UC内核 - H5容器使用UC内核 后,各项功能是否正常。
- 小程序 (必须使用UC内核),各项功能是否正常。
- 小程序打开手机相册、拍照及预览 是否正常。
- 小程序发起 HTTP 请求 是否成功(如果强制开启了 HTTP)。
扫一扫 - 标准 UI 扫码是否成功。
- 标准 UI 打开手机相册、拍照及预览是否正常。
- 自定义 UI 扫码是否成功,如自定义 UI,需要 适配部分新接口
统一存储 - 数据库加密存储 是否正常。
- 文件加密存储 是否正常。
分享 - 分享到新浪微博、QQ 是否成功。