Skip to main content
Version: 2026.0.311 🚧

Building to Mobile - Godot

This article will walk you through building your Skillz Godot project to Android and iOS.

Most of the platform wiring that a Unity integration does by hand is done for you by the Skillz export plugin that ships in the addon: it runs on every export, injects the Skillz native SDK and its dependencies, and writes the manifest and Xcode project settings the SDK needs. The steps below are the ones that remain on your side.

1. Configure Game for Skillz​

Open Project > Project Settings > Skillz and check the three settings from the install guide:

  • skillz/game_id: your Skillz game ID.
  • skillz/environment: Sandbox or Production.
  • skillz/orientation: portrait or landscape.
note

Select environment Sandbox for development and testing. Come back here and switch to Production when readying the build for publishing to the app stores. The same game ID is used in both; you do not get, or need, a separate ID to test.

caution

Please ensure to select the correct orientation if you plan to distribute your game on Android. This setting is important for ensuring your game renders in the correct orientation for gameplay. For instance, if the scene for your main menu is designed for Portrait mode, but your game scene is designed for Landscape, the orientation setting should be set to Landscape.

Additionally, you can choose if users are allowed to exit the Skillz UI via its sidebar menu with skillz/allow_skillz_exit (true by default).

Which environment should I test in?​

skillz/environmentSetup requiredWho has access
SandboxNone. Build and run with your game ID.Every studio. Use it for day-to-day development and QA.
ProductionUpload your build to the Skillz Developer Console; Skillz Developer Success must then enable that binary before it can talk to Production.Every studio, when validating a real-money build.

Whatever you pick, the build tells you: the export log prints skillz/environment=... -> skillz_production=..., and on device the log prints Skillz environment: <name> (<url>) at startup, from what the SDK itself resolved.

The export guard​

Each Android export preset gets two options of its own under SkillzSDK in the export dialog:

Preset optionMeaning
skillz/environmentProject default, or pin this preset to Sandbox or Production.
skillz/export_guard_overridefalse by default. The only way past the guard below; every export that uses it logs EXPORT GUARD OVERRIDDEN.

The guard runs before a binary exists and blocks a release export whose environment is not Production, and a Production build with debug baggage (a debug export, or skillz/replay_debug_save_local=true). A blocked export prints [SkillzSDK] EXPORT BLOCKED: <reason> and fails in Gradle, so there is no half-built APK to pick up by mistake. For a signed QA build against Sandbox, set skillz/export_guard_override on that preset.

2. Platform Setup​

Install the Android Build Template​

Select Project > Install Android Build Template. This creates android/build/ in your project. The Skillz SDK arrives as Gradle dependencies, so Godot's prebuilt APK templates cannot be used; the export plugin forces Gradle Build > Use Gradle Build on for every Android preset. Because the plugin supplies that value (and the target SDK) itself, the two rows are not shown in the preset's Gradle Build section: there is nothing to switch on, and nothing you can switch off.

The first Gradle build downloads the dependency tree and takes several minutes. Three Maven repositories must be reachable from the build machine: https://nexus.skillz.com/content/groups/public/, https://maven.singular.net/ and https://jitpack.io. The export adds them to your Gradle build.

Android Release preset, Options tab: the Gradle Build section as the Skillz export plugin presents it

What the export plugin injects​

You do not edit android/build/ by hand. On every export the plugin:

  • Adds the Skillz Android plugin AAR and the com.skillz.sdk:skillz-sdk-android dependency at the version the package was built against (pinned in addons/skillz/SKILLZ_ANDROID_SDK_VERSION; do not edit it).
  • Appends a marked block to android/build/build.gradle with the dependency exclusions and packaging options the SDK's dependency tree needs. If you reinstall the build template, the block is re-applied on the next export.
  • Writes the Skillz manifest meta-data from your project settings: game ID, environment, orientation, the Skillz activity hand-off, and push configuration.
  • Pins gradle_build/target_sdk to 34 (see below).

Package Name​

The preset's Package > Unique Name must be the application ID registered for your game in the Skillz Developer Console, because the APK fingerprint is registered against it. If you use push notifications it must also be the package name of the Android app in your Firebase google-services.json.

minSdk is 24. Ship arm64-v8a; armeabi-v7a and x86_64 are available in the package if you need them.

Target SDK 34​

The export plugin sets the target SDK to 34 on every Android preset and ignores a higher value. The Skillz SDK's GeoComply client rejects any app that targets a higher API level, and the failure is silent: the app installs and runs, free tournaments play, but a cash tournament never starts. The pin lifts with a future Skillz SDK release that ships a newer GeoComply client; until then do not raise it.

Since 31 August 2026 Google Play requires new apps and app updates to target API 36, so a build at target 34 cannot currently be submitted to or updated on Google Play. That is an SDK dependency, not something to work around in your preset: a build above 34 installs and then silently cannot start a cash tournament.

Push Notifications​

To enable Skillz push notifications on Android, set skillz/android_google_services_json to the path of your Firebase google-services.json (for example res://google-services.json). Leave it empty and push is off; nothing else depends on it. See Push Notifications for the Firebase project setup.

Release Signing​

Supply the release keystore through the preset's Keystore > Release fields, or through the GODOT_ANDROID_KEYSTORE_RELEASE_PATH, GODOT_ANDROID_KEYSTORE_RELEASE_USER and GODOT_ANDROID_KEYSTORE_RELEASE_PASSWORD environment variables. When those variables are set, Godot uses them instead of the preset fields, even if the fields are filled in; so on a machine or CI job that should sign with the key in the preset, make sure the variables are unset, or a stale environment signs the build with a different key than the preset shows. A release export signed with a debug key fails the Skillz integrity checks.

R8 / ProGuard​

Godot's stock build template does not enable R8, so most games never minify. If yours does, you need no Skillz rules: the Skillz AAR embeds its consumer rules. Two rules belong in your own android/build/proguard-rules.pro because they concern the engine and the build, not Skillz; they are listed in the AGENTS.md that ships in the addon under "R8 / ProGuard".

3. Build and Run​

Build with skillz/environment set to Sandbox first. Launch the game, tap your Start button, and the Skillz UI opens. Sign in or create a Sandbox account, pick a tournament, and the SDK hands the match to your game through the match_will_begin signal. Report the score when the round ends and control returns to Skillz.

On device, the first lines the SDK logs tell you what you built:

  • Android: adb logcat -s SkillzGodot shows Skillz environment: Sandbox (https://sandbox.skillz.com).
  • iOS: the Xcode console shows [Skillz] Skillz environment: Sandbox.

Production builds​

A Production build is only recognised after it has been uploaded to the Skillz Developer Console and enabled by Skillz Developer Success. The SDK fingerprints the exact binary, so every rebuild needs a new upload; an unregistered binary shows a "New Version Available" dialog instead of the Skillz lobby. See Release Your Game.

Next Steps​