Android Target API 28 升级指南
1. 背景
Google Play Store 要求2019年 8 月之后上线、11 月之后更新的 App 必须升级到 Target API 28
参考资料:
- https://developer.android.com/distribute/best-practices/develop/target-sdk
When you upload an APK, it needs to meet Google Play’s target API level requirements. Starting August 1, 2019, Google Play requires that new apps target at least Android 9.0 (API level 28), and that app updates target Android 9.0 from November 1, 2019. Until these dates, new apps and app updates must target at least Android 8.0 (API level 26).
- https://support.google.com/googleplay/android-developer/answer/113469#targetsdk
2. 如何升级到 Target API 28
简单说,将编译的 targetSdkVersion
的值修改为 28
即可
2.1. Android Studio 及 Gradle 编译工程
一般在 App 目录中的 build.gradle
文件中,修改 android
-> defaultConfig
->targetSdkVersion
的值为 28
即可,如:
2.2. Unity 项目
在 Unity 菜单 File
-> Build Settings ...
弹窗中,Platform
选中 Android
,在 Player Settings ...
中打开 Inspector
面板中,找到 Other Settings
-> Target API Level
中进行设定
2.3. UE4 项目
在 UE4 菜单 File
-> Package Project
-> Packaging Settings...
中打开弹窗,
并在找到 Platforms
-> Android
配置项,修改对应的配置
3. 配置及处理
3.1. 网络安全处理
Android 9 默认已经使用加密网络协议 (HTTPS),对于非 HTTPS 请求,需要添加配置或白名单处理
注意:使用 Webview 时,也无法打开非白名单 HTTP 网站
Google 升级说明:https://developer.android.com/about/versions/pie/android-9.0-changes-28#tls-enabled
3.1.1 添加全局配置
如果使用全局配置,在 AndroidManifest.xml
中的 application
节点,添加属性 android:usesCleartextTraffic="true"
:
3.1.2 添加域名白名单
配置方法:
- 在
AndroidManifest.xml
中的application
节点,添加android:networkSecurityConfig="@xml/network_security_config"
属性
xml
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>
- 添加
res/xml/network_security_config.xml
文件,并配置域名信息:
xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config>
<domain includeSubdomains="true">pingma.qq.com</domain>
<domain includeSubdomains="true">182.254.116.117</domain>
<domain includeSubdomains="true">android.bugly.qq.com</domain>
</domain-config>
</network-security-config>
更多配置信息请参考:https://developer.android.com/training/articles/security-config.html
3.2. Apache HTTP 库支持
如果应用中使用了 Apach HTTP 库,为保障在 Android 9 上正常运行,需要在 AnroidManifest.xml
中的 application
节点下添加如下配置
<uses-library android:name="org.apache.http.legacy" android:required="false" />
3.3. Webview 多进程数据目录限制
Android 9 限制了 Webview 的目录访问,MSDK 使用了多进程的 Webview 以保障内存被正常释放,业务需要升级 Android Webview 组件:
- 1.15.3 及以上 (2017年中之前接入的业务)
- 2.2.8 及以上版本 (2017年中之后接入的业务)
注意:由于多进程文件目录限制,Webview 之间无法共享 cookie、文件数据
4. 组件 SDK 升级
4.1. 灯塔
- 版本要求
灯塔的 SDK 版本需 >= 3.0.4
-
升级方法
-
使用新版本插件替换原插件
- 解压 jar 包,使用
beaconcomp
目录替换原工程目录中assets/beaconcomp
目录文件
4.2. 信鸽
- 版本要求
信鸽必须升级到 4.0.0 以上版本
- 升级方法
- 使用新版本插件替换原插件
- 如使用版本为 3.x.x,则删除原信鸽配置信息,并添加新版本配置信息
4.3. Bugly
- 版本要求
建议升级到最新版本 Java SDK 2.8.6, NDK 3.6.0
- 升级方法
- 使用新版本插件替换原插件
4.4. TBS Webview 浏览器
- 版本要求
- MSDK 插件必须升级以解决多进程数据目录共享问题
-
TBS SDK 可以支持,非必须升级
-
升级方法
- 使用新版本插件替换原插件
5. 升级注意事项
1、环境要求
对于Unity、UE4,请分别检查Android SDK、build-tools目录是否已经正确升级到指定的target 28版本,MSDK指定版本如下:
compileSdkVersion: 28,
buildToolsVersion: '28.0.3',
minSdkVersion : 15,
targetSdkVersion : 28,
其中,buildToolsVersion已经升级到target 28最高稳定版本