Files
ISODroid/docs/BUILDING.md
2026-03-14 00:19:12 +05:00

2.2 KiB

Building ISO Droid

This document explains how to build ISO Droid from source.

Requirements

  • Android Studio (or command-line Gradle)
  • Android SDK (API 26+)
  • Android NDK (for compiling isodrive binary)
  • Git (with submodule support)

Building from Source

1. Clone with Submodules

ISO Droid uses isodrive as a git submodule. Clone with submodules:

git clone --recurse-submodules https://git.shihaam.dev/shihaam/ISODroid.git
cd ISODroid

Or if already cloned, initialize submodules:

git submodule update --init

2. Install Android NDK

The isodrive binary is compiled from source during the build. This requires the Android NDK.

Android Studio:

  1. Go to Tools → SDK Manager
  2. Click SDK Tools tab
  3. Check NDK (Side by side)
  4. Click Apply

NixOS: The build automatically uses nix-shell to get the NDK if available.

Manual: Set ANDROID_NDK_HOME environment variable to your NDK path.

3. Build

# Build debug APK
./gradlew assembleDebug

# Or build release APK (requires signing configuration)
./gradlew assembleRelease

The Gradle build will automatically:

  • Compile isodrive for all architectures (arm64-v8a, armeabi-v7a, x86_64, x86)
  • Bundle the binaries into the APK assets
  • Skip compilation if binaries already exist

Output locations:

  • Debug: app/build/outputs/apk/debug/app-debug.apk
  • Release: app/build/outputs/apk/release/app-release.apk

Build from Android Studio

  1. Open the project in Android Studio
  2. Ensure NDK is installed (see above)
  3. Click Build → Build Bundle(s) / APK(s) → Build APK(s)

The isodrive binary will be compiled automatically before the APK is built.

Manual isodrive Build (Optional)

To manually trigger isodrive compilation:

./gradlew buildIsodrive

To force rebuild, delete existing binaries first:

rm -rf app/src/main/assets/bin/*/isodrive
./gradlew buildIsodrive

F-Droid Build

F-Droid uses srclibs instead of git submodules. The F-Droid metadata pre-builds isodrive before running Gradle, so the Gradle task skips compilation (binaries already exist).