PC compatibility and optimization for Google Play Games

Google Play Games requires that you make PC compatibility and optimization changes to your game. These changes ensure your game can run on a PC and the user experience is optimized for the platform.

Additionally, Google Play Games has graphics, device input, and cross-device play requirements. For more information, see the Get started guide.

When making the PC compatibility and optimization changes (other than x86 support), you can set up your game to detect Google Play Games and then disable or enable platform-specific features. This allows you to use the same APK or App bundle for your Android mobile and PC releases.

Here's a summary of the requirements and recommendations on this page:

Include x86 ABI architecture

Required by the release process

All the libraries included in your game require x86 ABI compatible versions to ensure the best performance and stability on the platform. Google Play Games supports both 32-bit and 64-bit versions, but you only need to choose one to meet the requirement.

Library compilation

To ensure the greatest x86 processor compatibility, don't use the atom instruction set when compiling your libraries. For example, when using gcc avoid using -march=atom and instead use either -march=x86 or -march=x86-64.

Target architecture in Unity

Some versions of Unity 2019 and 2020 lack x86 architecture support on Android. Make sure you're using Unity 2019.4.31f1, 2020.3.19f1, or later.

If your game uses a compatible version of the Unity game engine, do the following to enable x86/x86-64 Android targets:

  1. Go to Player Settings > Other Settings > Configuration > Scripting Backend and select IL2CPP from the dropdown menu to enable the IL2CPP Scripting Backend.

  2. Enable x86 Android targets for your version of Unity:

    • Unity 2018 and earlier: go to Player Settings > Other Settings > Target Architecture, and select the x86 checkbox.

    • Unity 2019 Long Term Support (LTS) release and later: go to Player Settings > Other Settings > Target Architectures and enable both x86 (Chrome OS) and x86-64 (Chrome OS).

To maximize game engine support, we recommend enabling both x86 and x86-64 support, or only x86-64 so you're not limited by a 32-bit memory space.

Since Unity 2018 only supports x86 targets, you can skip x86-64 support. However, you can't release that build on Android due to the 64-bit requirement. In that case, you need to maintain a separate build for Google Play Games.

Detect Google Play Games

You can detect the Google Play Games platform at runtime, allowing you to enable or disable platform-specific features in your game.

Check for the system feature com.google.android.play.feature.HPE_EXPERIENCE to determine if your game is running on the Google Play Games platform:

Kotlin

    var isPC = packageManager.hasSystemFeature("com.google.android.play.feature.HPE_EXPERIENCE")
  

Java

    PackageManager pm = getPackageManager();
    boolean isPC = pm.hasSystemFeature("com.google.android.play.feature.HPE_EXPERIENCE")
  

C#

var unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
var currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
var packageManager = currentActivity.Call<AndroidJavaObject>("getPackageManager");
var isPC = packageManager.Call<bool>("hasSystemFeature", "com.google.android.play.feature.HPE_EXPERIENCE");
  

Handle Android lifecycle Events

It's important to handle the onPause (c++) event in the Google Play Games environment. Your game is visible when a player activates the emulator overlay, so failing to listen to the onPause event can lead to a poor user experience.

Update the UI

Certain UI elements and gestures are not suitable on PC and should be updated.

Required:

  • Replace UI actions that need two or more fingers (multi-touch gestures). For example, you should replace pinch-to-zoom and other multi-touch gestures with the corresponding mouse and keyboard input. For details about device input changes, see Input support.

Recommended:

  • All user-visible text should say "click" instead of "tap".
  • Scrollable lists should have scrollbars.
  • Areas that users can pan should either have scrollbars or some other way to traverse large distances quickly.
  • Don't display a clickable keyboard on screen for text entry.
  • All text entries should be within the text field bounds.
  • Clicks on visible elements should:
    • Accept a click anywhere within the visible bounds of the element.
    • Not accept a click in the area outside of the visible element.
  • Dialogs should have a visible close button. Don't detect a click outside of the dialog bounds.

Disable permissions dialogs

Google Play Games doesn't display permissions dialogs, so you shouldn't attempt to display them before requesting permissions. If you displayed them previously, you should update your game so it no longer displays them on PCs.

Unsupported Android features and permissions

Required by the release process

On a PC, some Android features available on a mobile phone or tablet are inaccessible. This includes hardware features such as the camera and other features like a user's location. As a result, your game must not rely on unsupported Android features or permissions. On PCs, if your game requests access to an unsupported permission, the request automatically fails.

To make your game compatible with PCs, the following changes are required:

  • In your app manifest, add android:required="false" to the <uses-feature> declaration for all features that Google Play Games does not support. This only applies to the features already declared in your app manifest.

  • Disable features from your game that depend on unsupported hardware and software features on PCs. If you are using the same APK as your mobile game, then you can conditionally disable them for PCs.

  • Disable requests for unsupported Android permissions from your game, and features that depend on these permissions. If you are using the same APK as your mobile game, you can conditionally make these changes for PC, and you should not make any changes to the permissions declared in the manifest.

For more information on app manifest compatibility, see the Chromebook app manifest compatibility guide.

Functional testing requirements

Remove these hardware features before submitting the first test build to Google Play Console:

  • android.hardware.wifi
  • android.hardware.bluetooth
  • android.hardware.camera
  • android.hardware.location

For more information on how to remove the android.hardware.wifi feature, see Monitor connectivity status and connection metering. For a complete list of unsupported features, see the app manifest compatibility guide for Chromebooks.

Quality testing requirements

These commonly-used hardware features aren't compatible with PCs, so you must remove them before the final submission to Google Play Console:

  • android.hardware.audio.pro
  • android.hardware.bluetooth
  • android.hardware.camera
  • android.hardware.consumerir
  • android.hardware.location
  • android.hardware.nfc
  • android.hardware.sensor.light
  • android.hardware.sensor.accelerometer
  • android.hardware.sensor.barometer
  • android.hardware.sensor.compass
  • android.hardware.sensor.gyroscope
  • android.hardware.sensor.proximity
  • android.hardware.telephony
  • android.hardware.touchscreen
  • android.hardware.usb.accessory
  • android.hardware.usb.host
  • android.hardware.wifi
  • android.software.midi

Unsupported permissions

The following commonly-used permissions aren't supported on PCs, so your game must disable them for Google Play Games:

  • android.permission.ACCESS_COARSE_LOCATION
  • android.permission.ACCESS_FINE_LOCATION
  • android.permission.ACCESS_WIFI_STATE
  • android.permission.BLUETOOTH
  • android.permission.CAMERA
  • android.permission.FOREGROUND_SERVICE
  • android.permission.GET_ACCOUNTS
  • android.permission.INSTALL_PACKAGES
  • android.permission.READ_CONTACTS
  • android.permission.READ_EXTERNAL_STORAGE
  • android.permission.READ_PHONE_STATE
  • android.permission.RECEIVE_BOOT_COMPLETED
  • android.permission.REQUEST_INSTALL_PACKAGES
  • android.permission.SYSTEM_ALERT_WINDOW
  • android.permission.USE_CREDENTIALS
  • android.permission.WRITE_EXTERNAL_STORAGE
  • android.permission.WRITE_SETTINGS
  • com.google.android.gms.permission.ACTIVITY_RECOGNITION

External websites and WebViews

A browser intent loads in a PC's native web browser instead of one in the Google Play Games environment. This is an ideal experience for players in most situations.

To ease porting, Google Play Games does support WebView. Since this opens in the Google Play Games environment, it will lack the typical desktop browser. If you were previously using WebView for sharing your Terms of Service, Privacy Policy, or other similar content, you should instead invoke a browser intent.

Disable unsupported Google Play Service APIs

Required by the release process

Google Play Games ships its own Google Play Services variant that contains only a subset of the Google Play Services APIs. You need to confirm that your application does not strongly depend on modules that are omitted or unsupported on PC. Consider that some modules may be available, but their functionality is not supported at all times. For example, Firebase Cloud Messaging will not function when Google Play Games is closed.

Supported Modules

These modules are currently available and supported by Google Play Games, with plans for additional feature support:

Limited Support

The following modules are partially functional. We will do our best to support them on Google Play Games, but we cannot guarantee their functionality.

Not Supported

These modules are not supported in Google Play Games, but don't cause issues in Google Play Games when they fail:

Broken

Required by the release process

You must not use these modules on PCs because they can cause unexpected behavior in Google Play Games.

Enable scoped storage

Required by the release process

This section applies if your game reads or writes to external storage. Scope storage enforcement is required as an alternative way to read and write to storage. Doing this removes the need to prompt the player for these sensitive permissions:

  • android.permission.READ_EXTERNAL_STORAGE
  • android.permission.WRITE_EXTERNAL_STORAGE

For more information on scoped storage see:

Disable mobile ads in the PC version of your game

Required by the release process

To optimize your game for PCs, you must disable mobile ads on your PC version because they are incompatible with PCs. This includes all ad units provided by mobile ad SDKs. You are not required to make any changes to ads in the mobile version of your game. We recommend using feature flags to limit changes only to the PC version of your game. You can still keep mobile ads on Chrome OS.

When removing mobile ads, the following steps are required:

  • Disable all mobile ad units, including banners, interstitials, and rewarded ads.

  • Disable features from your game that depend on rewarded ads. For example, a feature that lets users watch a video ad to earn in-game currency could have the button deactivated or removed completely.

Analytics

Legacy Google Analytics products don't function in Google Play Games. If this applies to your games, you should migrate it to Google Analytics 4.

This should only affect your game if you're currently using Google Analytics 360. If you're using the Firebase SDK to track analytics events in your game and can see your game as a property in the Google Analytics Console, then you don't have to take any further action.