Tag: mobile game development

  • Cross-Platform Unity Development: One Project, Platform-Specific Delivery

    Cross-Platform Unity Development: One Project, Platform-Specific Delivery

    Unity can share scenes, assets and gameplay code across several targets, but “one identical codebase everywhere” is not a delivery plan. Operating systems differ in input, graphics, memory, lifecycle, permissions, safe areas, storefront services, privacy and release tooling. A maintainable project shares the stable core and isolates platform-specific behaviour behind tested interfaces.

    Start by naming supported target versions and devices. Unity's system-requirements page lists editor and player requirements for a pinned Unity release, but storefront submission rules can change independently (Unity — Unity 6 system requirements). Treat the release matrix as a maintained product decision.

    Article map for Cross-Platform Unity Development: One Project, Platform-Specific Deli…, covering Pin the toolchain and dependency graph, Build a platform-services boundary, Design input and interface for each form facto…
    Article map: Pin the toolchain and dependency graph; Build a platform-services boundary; Design input and interface for each form factor; Use target-specific quality and content budgets.

    Pin the toolchain and dependency graph

    Record the exact Unity editor version, render pipeline, package lock, scripting backend, SDK, NDK, JDK, Xcode and platform modules. Commit ProjectSettings, Packages/manifest.json and Packages/packages-lock.json; exclude generated Library and build output according to the repository policy.

    Upgrade in a branch with a backup and representative build tests. A project opening successfully in a new editor is not evidence that asset bundles, platform SDKs, save data or store integrations still work.

    Keep secrets, signing keys and store credentials out of the repository. CI should receive them through an approved secret store with least privilege and auditable rotation. Do not put production service keys in StreamingAssets or a client script; a shipped client is observable by its user.

    Build a platform-services boundary

    Gameplay should request a capability rather than calling a storefront SDK throughout the project. Define narrow interfaces for services such as:

    • user identity and guest mode;
    • achievements and leaderboards;
    • purchases and entitlement restore;
    • cloud save and conflict resolution;
    • sharing, notifications and review prompts;
    • file paths and local persistence;
    • analytics, consent and crash reporting; and
    • haptics and platform overlays.

    Provide a real adapter per supported platform and a deterministic development adapter. A missing capability needs a defined result—disabled, local fallback or clear error—not a null reference. Feature detection is safer than assuming every device in one platform family behaves identically.

    Keep conditional compilation close to adapter boundaries. A forest of #if directives inside gameplay code makes test coverage and ownership unclear. Validate platform callbacks on the main thread if the SDK requires it, and make asynchronous completion cancellable across scene changes and app suspension.

    Design input and interface for each form factor

    Use gameplay actions rather than hard-coded keys. Unity's Input System is the recommended system for new Unity 6 projects; the legacy UnityEngine.Input API is documented as legacy (Unity — Input System, Unity — legacy Input API).

    Provide bindings and prompts for keyboard and mouse, gamepad and touch according to the actual targets. Support hot-plug, rebinding, dead zones and multiple users where required. Touch interfaces need target sizes, finger occlusion and gesture-conflict tests; a virtual stick copied from desktop controls may not be usable.

    Build layouts around anchors, content constraints and device safe areas rather than one fixed reference resolution. Test narrow, wide, notched, folded and resized viewports as relevant. Text scaling, localisation and right-to-left content can change layout more than aspect ratio.

    Lifecycle behaviour also differs. Define pause, audio, networking, timers, saves and background-work policies for focus loss, suspension, termination and resume. Mobile operating systems may terminate an app without a final graceful shutdown callback, so persist critical progress at safe checkpoints.

    Decision path for Cross-Platform Unity Development: One Project, Platform-Specific Deli…, covering Build a platform-services boundary, Design input and interface for each form factor, Use target-specific quality and con…
    Decision path: Build a platform-services boundary; Design input and interface for each form factor; Use target-specific quality and content budgets; Use Build Profiles as versioned delivery inputs.

    Use target-specific quality and content budgets

    One visual configuration rarely suits every GPU and thermal envelope. Create quality tiers with explicit budgets for:

    • CPU and GPU frame time;
    • resolution and dynamic-resolution policy;
    • texture, mesh, audio and runtime memory;
    • shader variants and render features;
    • lighting, shadows, post-processing and particles;
    • loading and streaming; and
    • download and patch size.

    Do not identify performance by device model string alone. Use a supported capability and quality policy with conservative defaults, then let players adjust settings where appropriate. Test thermal throttling and long sessions, not just a cold one-minute capture.

    Profile a built player. Unity documents that attaching the Profiler to a development build is the most accurate way to profile the target platform; editor profiling includes editor overhead (Unity — Profile your application). Record build hash, device, scene, quality tier and capture duration.

    Use Build Profiles as versioned delivery inputs

    Unity 6 Build Profiles store build configurations as assets. They can preserve independent scene lists, scripting defines and platform settings for development and release variants (Unity — Build Profiles).

    Create named profiles such as:

    • Android development and release;
    • iOS development and release;
    • Windows development and release; and
    • Web development and release, if supported.

    Keep signing and secrets outside the asset. Add a pre-build validation step for application identifiers, version, scenes, backend, architecture, required icons, privacy declarations and environment endpoint. Generate a manifest containing editor, package and source revisions with the artefact.

    Build automation must fail when expected output or tests are missing. A green compile does not mean a store-ready package; signing, entitlements, native SDKs, privacy manifests and upload validation are separate gates.

    Test a matrix on physical devices

    Use layers of evidence:

    Layer Examples
    Fast automated tests gameplay model, save migration, adapters and content validation
    Editor or headless integration scenes, addressable content, input maps and service fakes
    Built smoke tests boot, first-run, suspend/resume, save, settings and shutdown
    Physical-device journeys input, safe area, thermal load, permissions, network changes and purchases in sandbox
    Store validation package, signing, declarations, required SDK and review metadata

    Select a minimum supported device, representative middle tier and at least one device for each distinct graphics or input family. Emulators are useful for automation but do not establish GPU, thermal, sensor, haptic or storefront behaviour.

    Document unsupported combinations and a rollback plan. Monitor crash-free sessions, load failures, performance and service errors with consent-aware telemetry. Do not claim broad compatibility from a small lab matrix.

    For help defining a Unity delivery architecture or target-device matrix, see Ozlin Info's game-development services or contact Ozlin Info.

    Related reading: Cross-platform game input architecture.


    Control and evidence map for Cross-Platform Unity Development: One Project, Platform-Specific Deli…, covering Use target-specific quality and content budgets, Use Build Profiles as versioned delivery inputs, Test a matr…
    Control and evidence map: Use target-specific quality and content budgets; Use Build Profiles as versioned delivery inputs; Test a matrix on physical devices; General-information disclaimer.

    General-information disclaimer

    This article provides general technical information. It does not guarantee compatibility, performance, storefront acceptance or platform certification. Verify current Unity, operating-system, SDK, privacy and storefront requirements for every release.

    AI-assistance disclosure

    AI tools assisted with source discovery, outlining and copyediting. A human reviewer must build and test the pinned project on real targets and verify current platform-holder requirements before publication or release.

    Practical checklist for Cross-Platform Unity Development: One Project, Platform-Specific Deli…, covering Test a matrix on physical devices, General-information disclaimer, AI-assistance disclosure and related review poi…
    Practical checklist: Test a matrix on physical devices; General-information disclaimer; AI-assistance disclosure; Primary sources checked.

    Primary sources checked

    Source access date: 29 August 2026.

  • Unity Android Release Checklist for Google Play in 2026

    Unity Android Release Checklist for Google Play in 2026

    Reviewed: 13 September 2026 · Next review: 13 December 2026
    Author: Ozlin Info Editorial Team · Human review: Lin (accountable human); Codex assisted

    A reliable Android release is a chain of evidence, not a final click on Build. The Unity project, Android manifest, native plug-ins, signing arrangement, Play Console declarations and device tests all need to agree. This checklist is written for Unity 6 and Google Play as reviewed on 28 August 2026; store rules and SDK support move, so re-check the linked first-party sources for every release.

    1. Choose a supported editor and freeze the release baseline

    Use a supported Unity release that can install the Android SDK, NDK and OpenJDK versions needed by the project and current Play requirement. Record the exact Unity editor version, package-lock file, Android toolchain versions, build profile and source commit. Make a clean release build in continuous integration or on a controlled build machine rather than relying on an unrecorded local setup.

    In Unity 6, Android builds are configured through File → Build Profiles. Unity's manual describes Android build profiles and the ability either to build directly or export a Gradle project for Android Studio (Unity: build Android applications). Export only when a plug-in, manifest or native integration genuinely needs that control; every custom Gradle or manifest override becomes release surface that must be reviewed after upgrades.

    2. Separate the package identity, minimum SDK and target SDK

    Set the application identifier deliberately, normally in reverse-domain form such as info.ozlin.gamename. Confirm ownership and naming before the first production release because updates must retain the same package identity and signing relationship.

    Do not confuse these two settings:

    • Minimum API level controls which Android versions can install the game. Choose it from Unity support, plug-in requirements and the devices you intend to support—not from an old generic recommendation. Unity 6.0's published player requirements start at Android 6.0/API 23, but the specific Unity patch and packages in the project remain authoritative (Unity 6 system requirements).
    • Target API level tells Android which platform behaviour set the app targets and is governed by Google Play submission policy.

    Google states that starting 31 August 2026, new apps and app updates must target Android 16/API level 36 or higher. The listed exceptions use different levels for Wear OS, Android Automotive OS, Android TV and Android XR. Existing phone/tablet apps must target API 35 or higher to remain available to new users on devices running a newer Android version (Google Play target API requirements). Because this draft was reviewed three days before that deadline, a release being prepared now should target API 36 and test Android 16 behaviour changes rather than plan around last year's threshold.

    After raising the target, test permission requests, background work, notifications, edge-to-edge layout, storage access and every Android plug-in. A successful compile does not demonstrate correct runtime behaviour.

    3. Configure the release player intentionally

    Review Player Settings and the active build profile together:

    • increment versionCode for every uploaded build and set a user-facing version string;
    • use IL2CPP when required by the selected architecture and release plan;
    • include ARM64 for Google Play device coverage and verify every native .so plug-in supplies a compatible binary;
    • remove development-only permissions, test endpoints and debug certificates;
    • use HTTPS for network traffic unless a documented exception is essential; and
    • review graphics APIs, texture formats, orientation, cut-outs and memory behaviour against the actual device matrix.

    Unity's Android Player Settings reference confirms that ARM64 is a target architecture available with the IL2CPP scripting backend and exposes minimum/target API, keystore and architecture settings (Unity: Android Player Settings). Do not enable GPU skinning, Vulkan, ASTC or an “adaptive performance” package as blanket checklist items. Each can be valuable for a suitable game and device set, but each needs compatibility and performance evidence.

    4. Build the artifact Google Play expects

    For Google Play, create an Android App Bundle (.aab). Unity 6 exposes Build App Bundle (Google Play) in the Android build profile; its documentation distinguishes this from the default APK output and explains the corresponding option when exporting a Gradle project (Unity: Android build settings). Google Play uses an uploaded bundle to generate device-optimised APKs (Play Console: create and set up an app).

    Use APKs for direct device testing when appropriate, but do not enable “Split APKs by target architecture” as an AAB size optimisation. Unity documents that its per-architecture APK setting is ignored when building an app bundle. For a large game, review Play's current compressed-download limits and assess Play Asset Delivery rather than discovering an artifact-size problem during submission.

    Generate native debug symbols for the IL2CPP release in the form expected by Play Console, store the mapping/symbol artifacts with the build, and confirm crash reporting can resolve the test build before launch.

    5. Treat signing as an operational system

    The old warning that losing one local keystore always makes future Play updates impossible is too broad. With Play App Signing, Google protects the app-signing key, while the developer uses an upload key to authenticate uploaded bundles. Google recommends separating those keys and documents a reset path for a lost or compromised upload key (Google Play: Play App Signing).

    Protect the upload keystore and password in approved secret storage; restrict Play Console roles; require multi-factor authentication; record certificate fingerprints needed by APIs; and document key recovery and release authority. Never commit a keystore or password to the Unity repository. Confirm a release is signed with the expected upload certificate before submission.

    6. Test what users will receive

    Test a release candidate on representative low-, mid- and high-tier physical devices, including the oldest supported Android version and Android 16. Cover first install, upgrade from the live version, offline start, save migration, sign-in, purchases, notification permission, background/resume, low storage, interrupted downloads and account deletion where applicable.

    Profile on the target device. Unity's guidance describes connecting the Unity Profiler to an Android player and collecting data from the running build (Unity: profile a target device). Record frame-time distributions, memory peaks, thermal behaviour, loading time and crash/ANR signals for the devices that define acceptance; an editor frame rate is not mobile evidence.

    Upload the signed AAB to internal testing first. Google recommends an internal test before wider tracks and supports up to 100 internal testers (Play Console testing tracks). Use the app-bundle explorer or internal app sharing to test generated, device-specific delivery rather than only a locally installed APK.

    7. Complete policy and launch evidence

    Finish the store listing, content rating, target-audience declarations, ads and monetisation disclosures, privacy policy, app-access instructions and the Data safety form. Google requires published apps—including closed, open and production tracks—to declare their collection and handling of user data; an internal-only test is the stated exception (Google Play Data safety). Inventory SDK behaviour rather than copying a declaration from a previous version.

    Keep a release record containing the commit, Unity version, signed artifact hash, version code, symbols, test results, known issues, policy answers, approval and rollback decision. Stage the rollout, watch crashes and ANRs, and define who can halt it. Store approval is a distribution decision, not proof that a game is defect-free, secure or suitable for every device.

    Related reading

    Limitations: This checklist is version- and project-dependent. Unity, Android and Play requirements, packages, signing, device behaviour and deadlines can change; it is not release approval or a guarantee of compatibility or compliance.

    AI-assistance disclosure

    AI tools assisted with outlining and copy editing. A human editor checked this draft on 28 August 2026 against the linked Unity 6 documentation and current Google Play requirements, including the API 36 deadline. Rules can change after review; the release owner must re-check official documentation and the project's actual dependencies before submission.

    Source access date: 2026-08-28

    Article map for Unity Android Release Checklist for Google Play in 2026, covering Unity Android Release Checklist for Google Play in 2026, Choose a supported editor and freeze the release baseline, Separate the package…
    Article map: Unity Android Release Checklist for Google Play in 2026; Choose a supported editor and freeze the release baseline; Separate the package identity, minimum SDK and target SDK; Configure the release player intentionally.
    Decision path for Unity Android Release Checklist for Google Play in 2026, covering Choose a supported editor and freeze the release baseline, Separate the package identity, minimum SDK and target SDK, Configure the rel…
    Decision path: Choose a supported editor and freeze the release baseline; Separate the package identity, minimum SDK and target SDK; Configure the release player intentionally; Build the artifact Google Play expects.
    Control and evidence map for Unity Android Release Checklist for Google Play in 2026, covering Configure the release player intentionally, Build the artifact Google Play expects, Treat signing as an operational system a…
    Control and evidence map: Configure the release player intentionally; Build the artifact Google Play expects; Treat signing as an operational system; Test what users will receive.
    Practical checklist for Unity Android Release Checklist for Google Play in 2026, covering Treat signing as an operational system, Test what users will receive, Complete policy and launch evidence and related review poin…
    Practical checklist: Treat signing as an operational system; Test what users will receive; Complete policy and launch evidence; AI-assistance disclosure.