Meeting Google Play requirements in the future

Earlier this week Google announced important changes to the Google Play requirements: target API level 26 (Android 8.0 Oreo) or higher will be required for new submissions starting August 2018, and all submissions starting November 2018. 64-bit support becomes mandatory for submissions in August 2019. In this blog post we would like to help you prepare for these changes and cover our plans to support the requirements.

We suggest you set Target API Level in the Player Settings to “Automatic”. This means the build process will set targetSdkVersion in your manifest to the latest SDK Platform you have installed within your Android SDK. Given that you have SDK Platform 26 (Android 8.0 Oreo) installed, you will fulfil the new requirements. To make it even easier for you, we will show you an SDK update prompt in the Editor if it’s missing, and you can let Unity update the Android SDK for you. After that you’re fully prepared for the new requirements.

If you want to control the target API level yourself, you can select the desired value in the Target API Level dropdown. We will be adding the latest API levels to the list for all currently supported Unity versions shortly. In any case, please make sure to thoroughly test your application after updating the target API level.

We are also happy to share that our native 64-bit support for Android is in its final development stage and is being tested internally. We aim to make it public in Unity 2018.2 as a preview and expecting it to mature in time for full release in 2018.3 (which is expected to ship in Q4 2018), well before the requirement is enforced by Google Play.

Initially, Unity Android ARM 64-bit support will only support IL2CPP scripting backend. IL2CPP technology offers C++ class performance for your scripts and can make your applications start-up time twice as fast. If you are publishing your games to Google Play and still using Mono scripting backend, we strongly recommend you consider moving to IL2CPP instead.

Mono on Android is based on Just In Time (JIT) compilation, which means code gets converted from .NET IL code to machine code right on the Android device, while IL2CPP is based on Ahead Of Time (AOT) compilation, when all the code is converted to machine code (through intermediate form of C++ code) on developer’s machine. AOT allows you to have faster startup times and better overall performance, because most of the expensive optimizations are done on a desktop machine, rather than on a mobile device. More information on IL2CPP can be found on the dedicated Unity Manual page.

If you’re using custom native plugins, you should modify your build scripts to include ARM64 architecture. If you rely on third party native plugins, reach out to your plugin provider for ARM64 support.

Thanks for the update. Can you comment on the size increase for including the 64-bit libraries in the APK?
We are currently building 2 different APKs – x86 and ARM. Maybe we can further split this into ARM32 and ARM64 so that the APK size won’t be affected.

Lior – your concern makes total sense, especially that IL2CPP implies having a native library with user scripts and the runtime. If you want to include all 3 currently supported architectures into the same APK, it means you need to have IL2CPP libraries (and compiled user scripts) for each architecture.

As you can see from Google’s blog post, using Multiple APK support is the recommended solution. On our side, we are adding checkboxes for each supported architecture in the Player settings, so that you can combine them as you wish. Of course, you will be able to build APKs for ARM 32-bit, ARM 64-bit and x86 separately.