Android 15 & iOS 18 Migration Guide
Migrate to Android 15
According to the latest Google Play requirements for app releases, targetSdkVersion
must be API 34 (Android 14) or later from August 2024, and API 35 (Android 15) or later from 2025.
In order to meet compliance requirements in the long-term and ensure that your app can be released, Player Network SDK V1.28 has upgraded targetSdkVersion
to 35. Developers should complete the necessary adjustments to their build environments.
Impact points
In Android 15, Google has introduced several mandatory behavioral changes and permission constraints that take effect only when targetSdkVersion = 35
, notably:
Categories | Remarks |
---|---|
PendingIntent security policy | Must explicitly declare FLAG_IMMUTABLE or FLAG_MUTABLE |
foregroundServiceDeclaration | Must declare foregroundServiceType in the manifest file |
Notification permissions | Notification permissions must be requested at runtime since Android 13+ |
Storage access restrictions | Access to /Android/data and /obb directories are prohibited, SAF or MediaStore recommended |
JobScheduler restrictions | Tighter restrictions on jobs, such as suppressing scheduling frequency |
For a comprehensive overview of the changes, see Android 15 Features and Changes.
If your project does not upgrade to targetSdkVersion = 35
, the above behaviors will not be triggered. However, the SDK is unable to guarantee functionality in projects with conflicting versions.
Support for 16KB Page Size
Since Android 15, AOSP supports devices configured with a 16KB memory page size. If your app utilizes any NDK libraries, whether directly or indirectly through an SDK, you will need to rebuild your app to ensure it runs on these 16KB devices. As manufacturers continue to produce devices with larger physical memory (RAM), many will adopt a 16KB (or larger) memory page size to optimize device performance. Adding support for 16KB memory page sizes allows your app to run on these devices and benefit from the associated performance improvements. Without recompilation, apps might not function properly on devices supporting 16KB in future Android versions.
Note: Game adaptation to 16KB memory page sizes requires engine support. The support status and plans for mainstream engines are as follows:
- Unity: Not supported yet, planned support in LTS versions, see https://discussions.unity.com/t/about-support-16-kb-page-sizes-on-android-15/950036 for details.
- Unreal: Not supported yet.
Currently, only Pixel 8, 8Pro, 8a devices with Android 15 QPR1 Beta installed can enable 16KB mode in the developer options. The widespread adoption of 16KB mode will have a timeline, and businesses should monitor engine support plans to determine or adjust the timing of game support.
Changes in the project environment
- Unity
- Unreal Engine
Upgrade Unity to the following LTS versions or later:
- 2021.3.45f1
- 2022.3.60f1
- 6000.0.45f1
Upgrade to Android API level 35 by updating the targetSdkVersion
in your Unreal Engine project:
- Navigate to the Config folder in your Unreal Engine project directory.
- Open the
DefaultEngine.ini
file. In theDefaultEngine.ini
file, add or modify the following lines to set thetargetSdkVersion
:
TargetSDKVersion=35
SDKAPILevelOverride=android-35
- After making the changes, save and close the
DefaultEngine.ini
file.
Upgrade Android Gradle Plugin (AGP)
- Unity
- Unreal Engine
Upgrade Gradle Wrapper version
-
Find the Gradle installed with Unity option in the Editor menu Unity > Settings > External Tools and uncheck it, then select the path of
gradle-8.7-bin
in the Gradle path. -
Modify the environment variable
GRADLE_HOME
to the path of Gradle 8.7 version:# sh
export GRADLE_HOME=/Users/***/.gradle/wrapper/dists/gradle-8.7-bin/****/gradle-8.7
export PATH=${PATH}:${GRADLE_HOME}/bin
Modify AGP version dependency
After upgrading to Player Network SDK V1.28, INTLSDK/Source/INTLCore/Libs/Android/INTLCore_APL.xml
has already upgraded the AGP to version 8.6.0, so no modification is required.
Check the version of "com.android.tools.build:gradle:x.x.x"
in the Assets/Plugins/Android/baseProjectTemplate.gradle
file. If the version is below 8.6.0, you will need to update it to 8.6.0.
Follow the below procedures to upgrade AGP for your project:
Upgrade Gradle Wrapper version
-
Download the gradle-8.7-bin.zip file from the official website and extract it to your chosen directory.
-
Set the path of the
GRADLE_HOME
environment variable to the extract location ofgradle-8.7-bin
.# sh
export GRADLE_HOME=/Users/***/.gradle/wrapper/dists/gradle-8.7-bin/****/gradle-8.7
export PATH=${PATH}:${GRADLE_HOME}/bin -
Modify the
/Engine/Build/Android/Java/gradle/gradle/wrapper/gradle-wrapper.properties
file in the engine directory, changingdistributionUrl
to the URL for Gradle 8.7:distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
Modify AGP dependency version
If you have already upgraded to Player Network SDK V1.28, the AGP version in INTLSDK/Source/INTLCore/Libs/Android/INTLCore_APL.xml
has already been updated to 8.6.0, and does not need to be modified.
To add or modify the buildscript block in an APL (Android Project Library) file:
<buildscriptGradleAdditions>
<insert>
dependencies {
classpath 'com.android.tools.build:gradle:8.6.0'
}
</insert>
</buildscriptGradleAdditions>
Upgrade Java version
- Unity
- Unreal Engine
The default Java version for Unity is recommended to be used.
AGP 8.6.0 requires Java 17. If your current Java version is below 17, you'll need to download and install JDK 17 and update your environment variables accordingly:
# 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
Validation
Verify basic information
When unpacking an APK, check the following fields in the AndroidManifest.xml
file to ensure they meet expectations:
-
Review the
package
attribute in the<manifest>
tag to confirm that the package name is correct. -
Examine the
platformBuildVersionCode
attribute in the<manifest>
tag, which should be set to 35. -
Look at the
android:minSdkVersion
attribute within the<uses-sdk>
tag. This should reflect the minimum Android API level supported by your game.Relationship between Android API Levels and Android Versions: https://apilevels.com/
-
Check the
android:targetSdkVersion
attribute within the<uses-sdk>
tag, which is expected to be 35.
AndroidManifest.xml
example:
<!---AndroidManifest-->
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
android:compileSdkVersion="35"
android:compileSdkVersionCodename="14"
package="your.package.name"
platformBuildVersionCode="35"
platformBuildVersionName="14">
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="35" />
......
Compatibility testing
Conduct compatibility testing using the product, with a focus on its performance on Android 15.
Migrate to iOS 18
Starting April 2025, all iOS and iPadOS apps uploaded to App Store Connect must be built using the iOS 18 SDK.
The Player Network SDK plugin is compiled with XCode 15 and supports XCode 16 (iOS 18). There are no other specific issues to consider for this adaptation.
Validation
Verify basic information
To verify the iOS build, unpack the IPA file and check the DTSDKName
field in the info.plist
to ensure it corresponds to the version used. For instance, if the build was compiled with XCode 15, the field should show iphoneos17.*
. If compiled with XCode 16, it should show iphoneos18.0
.
Example of info.plist
:
...
<key>DTSDKName</key>
<string>iphoneos17.*</string>
...
Compatibility testing
Conduct compatibility testing using the product, with a focus on its performance on iOS 18.