I have a match-3 game that exports and works beautifully on Android. But after the launcher icon displays, there is a 10-15 second blank (black) screen. It feels like the phone is dead. After that period, the boot splash works, and the game works perfectly. I notice the same sequence in Candy Crush, but right after the launcher icon displays briefly, during this 10-second period, the King logo and the words “Loading” appear. I would like to do something similar.

To fix this, I need to show a simple loading screen (like a logo and the word “Loading”) during that 10-15 second blank screen, before the Godot boot splash appears. From what I’ve learned, this blank screen happens because the Godot engine is starting up (loading its files and setting up the graphics), and it doesn’t show anything on the screen until it’s ready. To add a loading screen during this time, I need to create a native Android screen (called a “LoadingActivity”) that shows my logo and “Loading” text right when the app starts, then switches to the Godot game after the engine is ready.

To do this, I need to export my Godot project as Android source files (not just an APK file) so I can change some Android files and add my loading screen. In Godot, there’s supposed to be an option called Export Project in the Export window that lets me do this. It would give me a folder with Android files I can open in Android Studio, where I can add my LoadingActivity and put my logo in the right place. Then I can build a new APK with the loading screen included.
Here’s what I’ve tried with the custom export in Godot 4.4.1 (I also tried 4.3):
I went to Project > Export and selected my Android preset.

I turned on Advanced Options and unchecked Use Gradle Build, which showed a Custom Template section.

I was hoping this would make the Export Project option appear in the Export Format dropdown (which currently only shows Export APK and Export AAB), but it didn’t.

I also tried editing the export_presets.cfg file in my project folder to add custom_build=true, use_gradle_build=false, and export_format=2, but this didn’t make Export Project show up either.

What I need is a way to make the Export Project option appear in Godot 4.4.1 so I can export my project as Android source files. Then I can use Android Studio to add my loading screen and build a new APK that shows my logo and “Loading” text during the 10-15 second blank screen, before the Godot boot splash starts.

If there’s another way to add a loading screen during the Android engine startup without exporting the source files, I’d love to hear about that too!

Details:
Godot Version: 4.4.1.stable.official [49a5bc7b6] (also tested on 4.3)

OS: macOS 14.6.1

Export Target: Android (Min SDK 24, Target SDK 34)

  • kagada likes this.
  • whwall

    Update & Final Fix

    The earlier solution to add a native Android splash screen worked technically — but it caused two launcher icons to appear on the phone. Even after factory resets, the issue persisted. After much testing, I discovered the cause:

    ➡️ Using the Gradle export (with custom Java splash) caused duplication.
    ➡️ Switching back to a non-Gradle export with gl_compatibility as the rendering method fixed everything.

    Now there's only one app icon, and the game launches immediately with no black screen delay — even on slower phones.

    Final takeaway: If you're seeing a long blank screen on Android startup, first try setting:
    Project Settings > Rendering > Rendering Method.mobile = gl_compatibility

    And consider avoiding a Gradle export unless you really need it. Hope this helps someone else!

whwall show my logo and “Loading” text during the 10-15 second blank screen

Yes, I understand that, you've stated it three times.

I'll remove my replies, since they weren't useful.

12 days later

[SOLVED] Show Android Splash Screen Before Godot Boot Splash (Godot 4.4.1)

Problem:
When launching my Godot Android game, the screen goes black for 10–15 seconds before the boot splash appears. I wanted to display a logo and a “Loading…” message during that time (like Candy Crush does).

Cause:
That blank screen is when the Godot engine is starting up. By default, nothing is shown until it's ready.

Goal:
Add a native Android splash screen that shows instantly, before Godot’s engine kicks in.

Solution:
You need to create a native Android Java activity (SplashActivity.java) and set it as your app’s launcher. It shows your logo/message for a few seconds, then launches Godot.

Steps:

  1. Export the Android build from Godot with:

    • Use Gradle Build: ON
    • Custom Build: ON (shows full Android project structure)
  2. Create this Java file: android/build/src/main/java/com/godot/game/SplashActivity.java

package com.godot.game;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class SplashActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        FrameLayout rootLayout = new FrameLayout(this);
        rootLayout.setBackgroundColor(Color.BLACK);

        LinearLayout verticalLayout = new LinearLayout(this);
        verticalLayout.setOrientation(LinearLayout.VERTICAL);
        verticalLayout.setGravity(Gravity.CENTER);
        verticalLayout.setLayoutParams(new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT));

        ImageView logo = new ImageView(this);
        logo.setImageResource(R.drawable.splash_logo);
        logo.setAdjustViewBounds(true);

        TextView message = new TextView(this);
        message.setText("TNT comin' up... – Mud Dog 🐾");
        message.setTextColor(Color.WHITE);
        message.setTextSize(16);
        message.setGravity(Gravity.CENTER);

        verticalLayout.addView(logo);
        verticalLayout.addView(message);
        rootLayout.addView(verticalLayout);
        setContentView(rootLayout);

        new Handler().postDelayed(() -> {
            Intent intent = new Intent(SplashActivity.this, GodotApp.class);
            startActivity(intent);
            finish();
        }, 4000);
    }
}
  1. Put your logo at:
    android/build/src/main/res/drawable/splash_logo.png

  2. In AndroidManifest.xml, use this launcher:

<activity android:name="com.godot.game.SplashActivity"
    android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
    android:exported="true"
    android:screenOrientation="portrait">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity android:name="com.godot.game.GodotApp"
    android:exported="false"
    android:screenOrientation="portrait" />

That’s it! You now get a clean, branded loading screen before the Godot engine even starts. Works great on slower phones.

Godot 4.4.1 | macOS | Android target SDK 34

    whwall

    Update & Final Fix

    The earlier solution to add a native Android splash screen worked technically — but it caused two launcher icons to appear on the phone. Even after factory resets, the issue persisted. After much testing, I discovered the cause:

    ➡️ Using the Gradle export (with custom Java splash) caused duplication.
    ➡️ Switching back to a non-Gradle export with gl_compatibility as the rendering method fixed everything.

    Now there's only one app icon, and the game launches immediately with no black screen delay — even on slower phones.

    Final takeaway: If you're seeing a long blank screen on Android startup, first try setting:
    Project Settings > Rendering > Rendering Method.mobile = gl_compatibility

    And consider avoiding a Gradle export unless you really need it. Hope this helps someone else!