Android 16 & Target 36 适配文档
适配 Android 16
根据 Google Play 对于应用发布的最新政策,自2025年8月31日起 targetSdkVersion 必须为 API 35(Android 16)或更高版本,并从2026年8月起必须为 API 36(Android 16)或更高版本。**API预计 API 36(Android 16)将在 2026 年第三季度 左右成为强制要求,这基于 Google 每年的执行模式。
为满足长期合规要求、避免发布阻断及版本下架风险,Player Network SDK V1.32 已升级 targetSdkVersion 为 36,接入方需完成必要的构建环境调整。
行为变更影响
对于 Android 16,Google 引入了多项强制行为变更和权限约束,这些变更仅在 targetSdkVersion = 36 时生效,主要包括:
| 类别 | 备注 |
|---|---|
| Edge-to-Edge 强制适配 | View.setSystemUiVisibility 及 SYSTEM_UI_FLAG_* 系列常量在 Android 16 上完全失效,需改用 WindowInsetsControllerCompat 实现沉浸式与全屏 |
| Predictive Back 手势 | 废弃 onBackPressed() 重写方式,必须改用 OnBackPressedDispatcher + OnBackPressedCallback 处理返回逻辑 |
整体变更请参见 Android 16 功能以及变更。
若接入方未同步升级 targetSdkVersion = 36,上述行为不会触发,SDK 无法在非兼容行为模型下保障功能正确性。
支持 16KB Page Size
从 Android 16 开始,AOSP 支持设备将内存页面大小配置为 16KB。如果您的应用使用了任何 NDK 库,无论是直接使用还是通过 SDK 间接使用,那么您将需要重新构建您的应用,以便在这些 16KB 设备上运行。随着设备制造商继续生产拥有更大物理内存(RAM)的设备,许多这类设备将采用 16KB(甚至更大)的内存页面大小来优化设备性能。为 16KB 内存页面大小的设备添加支持,可以使您的应用在这些设备上运行并使应用从相关的性能改进中受益。如果不重新编译,应用可能无法在未来 Android 版本中正式支持 16KB 的设备上正常运行。
注:游戏适配 16KB 内存页面大小需要引擎支持,主流引擎的支持情况以及计划如下:
- Unity:未支持,计划在 LTS 版本支持,详见 https://discussions.unity.com/t/about-support-16-kb-page-sizes-on-android-16/950036
- Unreal:未支持
当前仅有 Pixel 8、8Pro、8a 设备安装了 Android 16 QPR1 Beta 版本后可以在开发者选项中开启 16KB 模式,16KB 模式的普及也会有一个时间窗口,业务可以关注引擎的支持计划,来确定或调整游戏的支持时间。
开发环境适配修改点
- Unity
- Unreal Engine
建议将 Unity 升级至以下 LTS 版本或以上:
- 2021.3.45f1
- 2022.3.60f1
- 6000.0.45f1
将游戏设置为针对 Android API 级别 36,在 Unreal Engine 升级 targetSdkVersion:
- 在你的 Unreal Engine 项目中,找到 Config 文件夹,然后打开
DefaultEngine.ini文件; - 在
DefaultEngine.ini文件中,你需要添加或修改以下行来设置targetSdkVersion:
TargetSDKVersion=36
SDKAPILevelOverride=android-36
- 修改完成后,保存并关闭
DefaultEngine.ini文件。
升级 Android Gradle Plugin (AGP)
- Unity
- Unreal Engine
升级 Gradle Wrapper 版本
-
在 Editor 菜单 Unity > Settings > External Tools 中找到 Gradle installed with Unity 选项并取消勾选后,在下方 Gradle 路径中选择设备的
gradle-8.11.1-bin的路径。 -
修改环境变量,将环境变量
GRADLE_HOME设置为 Gradle 8.11.1 版本的路径:# sh
export GRADLE_HOME=/Users/***/.gradle/wrapper/dists/gradle-8.11.1-bin/****/gradle-8.11.1
export PATH=${PATH}:${GRADLE_HOME}/bin
修改 AGP 版本依赖
升级至 Player Network SDK V1.32 后,Assets/Plugins/Android/baseProjectTemplate.gradle 中已经将 AGP 升级到 8.9.1 版本,无需修改。
查看 Assets/Plugins/Android/baseProjectTemplate.gradle 文件中的 "com.android.tools.build:gradle:x.x.x",如果版本低于 8.9.1,需要修改至 8.9.1。否则无需修改。
参考以下步骤升级 AGP:
升级 Gradle Wrapper 版本
-
下载 gradle-8.11.1-bin.zip 并解压;
-
修改环境变量
GRADLE_HOME到gradle-8.11.1-bin的解压路径:# sh
export GRADLE_HOME=/Users/***/.gradle/wrapper/dists/gradle-8.11.1-bin/****/gradle-8.11.1
export PATH=${PATH}:${GRADLE_HOME}/bin -
修改引擎中的
/Engine/Build/Android/Java/gradle/gradle/wrapper/gradle-wrapper.properties文件, 将distributionUrl改为 Gradle 8.11.1 的 URL:distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip
修改 AGP 版本依赖
升级至 Player Network SDK V1.32 后,INTLSDK/Source/INTLCore/Libs/Android/INTLCore_APL.xml 中已经将 AGP 升级到 8.9.1 版本,无需修改。
在 APL 文件中新增或修改:
<buildscriptGradleAdditions>
<insert>
dependencies {
classpath 'com.android.tools.build:gradle:8.9.1'
}
</insert>
</buildscriptGradleAdditions>
升级 Java 版本
- Unity
- Unreal Engine
建议使用 Unity 默认版本 Java。
AGP 8.9.1 需要搭配 Java 17,如果当前 Java 版本低于 17,需要下载安装 JDK 17 并修改环境变量:
# sh
# set JAVA_HOME to your jdk 17 installation path.
export JAVA_HOME=/Users/***/Library/Java/JavaVirtualMachines/microsoft-17.jdk/Contents/Home
export PATH=${PATH}:${JAVA_HOME}/bin
如何验收
基本信息确认
解包产物 APK,在包中的 AndroidManifest.xml 文件中,查看以下字段是否符合预期:
-
查看
<manifest>中的package属性,以确认产物包名是否正确; -
查看
<manifest>中的platformBuildVersionCode属性,其值预期应为 36; -
查看
<uses-sdk>中的android:minSdkVersion属性,其值应为业务所支持的最低 Android API 版本;Android API 与 Android 版本对照表:https://apilevels.com/
-
查看
<uses-sdk>中的android:targetSdkVersion属性,其值预期应为 36;
AndroidManifest.xml 示例:
{/*-AndroidManifest*/}
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
android:compileSdkVersion="36"
android:compileSdkVersionCodename="14"
package="your.package.name"
platformBuildVersionCode="36"
platformBuildVersionName="14">
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="36" />
......
兼容性测试
使用产物进行兼容性测试,重点关注产物在 Android 16 上的表现。