#!/bin/bash # Sync Android source files from src-tauri/android to src-tauri/gen/android # This ensures the generated build directory has the latest source files set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" SOURCE_DIR="$PROJECT_ROOT/src-tauri/android/src/main/java/com/dtourolle/jellytau" TARGET_DIR="$PROJECT_ROOT/src-tauri/gen/android/app/src/main/java/com/dtourolle/jellytau" echo "Syncing Android sources..." echo " From: $SOURCE_DIR" echo " To: $TARGET_DIR" # Create target directory if it doesn't exist mkdir -p "$TARGET_DIR" # Remove old copies of player and security directories rm -rf "$TARGET_DIR/player" "$TARGET_DIR/security" # Copy the directories cp -r "$SOURCE_DIR/player" "$TARGET_DIR/" cp -r "$SOURCE_DIR/security" "$TARGET_DIR/" # Copy individual Kotlin files (like VideoOverlayManager.kt) for kt_file in "$SOURCE_DIR"/*.kt; do if [ -f "$kt_file" ]; then cp "$kt_file" "$TARGET_DIR/" echo " Copied: $(basename "$kt_file")" fi done # Restore the app module build.gradle.kts (media3 deps + release signing config). # gen/android is regenerated by `tauri android init`, so this tracked template is # the source of truth and must be copied back after any (re)generation. APP_GRADLE_SRC="$PROJECT_ROOT/src-tauri/android/app/build.gradle.kts" APP_GRADLE_DST="$PROJECT_ROOT/src-tauri/gen/android/app/build.gradle.kts" if [ -f "$APP_GRADLE_SRC" ]; then cp "$APP_GRADLE_SRC" "$APP_GRADLE_DST" echo " Copied: app/build.gradle.kts" fi # Custom ProGuard/R8 keep rules. Required for minified release builds: # the player/ and security/ Kotlin classes are loaded by name via JNI from # Rust, so R8 can't see the references and would strip them without this. # build.gradle.kts globs **/*.pro, so dropping it in app/ is enough. PROGUARD_SRC="$PROJECT_ROOT/src-tauri/android/app/proguard-jellytau.pro" PROGUARD_DST="$PROJECT_ROOT/src-tauri/gen/android/app/proguard-jellytau.pro" if [ -f "$PROGUARD_SRC" ]; then cp "$PROGUARD_SRC" "$PROGUARD_DST" echo " Copied: app/proguard-jellytau.pro" fi # Launcher icons / adaptive-icon mipmaps. `tauri android init` generates # low-quality launcher icons from tauri.conf.json (which has no high-res # Android source), so overwrite them with the real committed mipmaps. RES_SRC="$PROJECT_ROOT/src-tauri/android/src/main/res" RES_DST="$PROJECT_ROOT/src-tauri/gen/android/app/src/main/res" if [ -d "$RES_SRC" ]; then for dir in "$RES_SRC"/mipmap-*; do [ -d "$dir" ] || continue name="$(basename "$dir")" mkdir -p "$RES_DST/$name" cp "$dir"/* "$RES_DST/$name/" echo " Copied res: $name" done # We ship only the color adaptive icon (background + foreground). Drop any # monochrome layer Tauri may generate: the themed-icon monochrome doesn't # render well, and our adaptive-icon xml no longer references it, so a stray # ic_launcher_monochrome.png would just be dead weight. rm -f "$RES_DST"/mipmap-*/ic_launcher_monochrome.png fi echo "✓ Android sources synced successfully"