Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/pojavlauncherteam/pojavlauncher/llms.txt

Use this file to discover all available pages before exploring further.

Building PojavLauncher yourself gives you full control over the code, lets you test local changes, and produces a debug APK without waiting for an official release. The quickest path takes only two commands; the detailed path walks through every dependency so you know exactly what goes into the final APK.
PojavLauncher has been discontinued. These build instructions apply to the final archived state of the repository. For active development, consider the successor project Amethyst Android.

Prerequisites

Before you start, make sure the following tools are available on your machine:
ToolNotes
GitUsed to clone the repository
JDK 11 or laterRequired by the Gradle build system (org.gradle.jvmargs=-Xmx4096M is set in gradle.properties)
Android SDKInstall via Android Studio or the standalone command-line tools
Android NDK r25c (25.2.9519653)The ndkVersion is pinned in app_pojavlauncher/build.gradle
Android Build Tools 34Specified as buildToolsVersion = '34.0.0'
The easiest way to satisfy the Android SDK, NDK, and Build Tools requirements is to install Android Studio and use its SDK Manager to install the exact versions listed above.

The repository is configured to download all pre-built native dependencies automatically when you run Gradle. This is the fastest way to get a working APK.
1

Clone the repository

git clone https://github.com/PojavLauncherTeam/PojavLauncher.git
cd PojavLauncher
2

Build the debug APK

./gradlew :app_pojavlauncher:assembleDebug
3

Locate the output APK

After a successful build, the APK is written to:
app_pojavlauncher/build/outputs/apk/debug/
Transfer the .apk file to your Android device and install it as described in the Installation guide.
Gradle downloads several gigabytes of dependencies on a clean build. The build daemon is allocated 4 GB of heap (-Xmx4096M in gradle.properties) — make sure your machine has at least 4 GB of RAM free before starting.

Detailed Build

If you need to customise native dependencies — for example, to use a self-compiled JRE or a patched LWJGL3 — follow these steps in order.

Step 1 — Java Runtime Environment (JRE)

PojavLauncher bundles a mobile port of OpenJDK for ARM and x86 Android targets. You have two options:

Step 2 — LWJGL3

PojavLauncher uses a custom fork of LWJGL3 with Android-specific patches. Build instructions are maintained in the lwjgl3 fork repository.

Step 3 — Update the Language List

Translations are managed through Crowdin, which adds new language resources automatically. Because of this, the language list file must be regenerated before each build — otherwise the build will fail or produce an incomplete APK. From the root of the repository, run the appropriate script for your platform:
chmod +x scripts/languagelist_updater.sh
bash scripts/languagelist_updater.sh
Skipping this step can cause the build to fail with a missing resource error. Always run the language list updater when building from a freshly cloned repository or after pulling new commits.

Step 4 — Build the GLFW Stub

The launcher’s input system depends on a custom GLFW stub (jre_lwjgl3glfw). Build it before assembling the main APK:
./gradlew :jre_lwjgl3glfw:build

Step 5 — Build the Launcher APK

With all dependencies in place, assemble the final debug APK:
./gradlew :app_pojavlauncher:assembleDebug
The output APK will be located at:
app_pojavlauncher/build/outputs/apk/debug/

Build Variants

The app_pojavlauncher module defines several build types you can target:
Gradle taskDescription
assembleDebugDebug build with .debug application ID suffix — safe to install alongside the release APK
assembleReleaseRelease build (no minification by default to preserve java.awt references)
assembleProguardDebug variant with ProGuard minification and resource shrinking enabled
assembleProguardNoDebugSame as proguard but with debuggable false — suitable for non-Play release testing
assembleGplayGoogle Play release variant (requires GPLAY_KEYSTORE_PASSWORD environment variable)
The Gradle daemon is configured with org.gradle.configureondemand=true in gradle.properties. This is required because jre_lwjgl3glfw must compile with Java 8 while app_pojavlauncher uses plugins that require Java 11. Do not remove this setting.

Subprojects

settings.gradle declares the following Gradle subprojects — all of them are included in the repository:
include ':jre_lwjgl3glfw'       // GLFW stub (native input bridge)
include ':app_pojavlauncher'    // Main launcher application
include ':arc_dns_injector'     // DNS injection helper
include ':forge_installer'      // Headless Forge installer
The main assembleDebug task will automatically trigger the forge_installer:jar, arc_dns_injector:jar, and jre_lwjgl3glfw:jar tasks via the mergeDebugAssets dependency declared in app_pojavlauncher/build.gradle.

Build docs developers (and LLMs) love