#!/usr/bin/env bash # # Deja el proyecto listo para compilarlo desde Android Studio. # # Android Studio solo compila: no sabe traer el Oasis oficial, ni sacar libnode.so # del APK de epsylon, ni empaquetar el backend. Esto lo hace todo de una vez: # # 1. clona el Oasis oficial en ../upstream, en el commit de .upstream-commit # (de ahi salen las dependencias del backend, src/base/node_modules) # 2. descarga el APK oficial de la misma version a android/native/ # (de ahi salen libnode.so y los modulos nativos de Node para Android) # 3. lanza prepare.sh, que copia las librerias y empaqueta el backend # # Uso, desde la raiz del repo o desde android/: # ./android/scripts/android-studio.sh # # Despues, en Android Studio: File > Open > la carpeta android/, esperar a que # termine el Gradle Sync, y Build > Build App Bundle(s) / APK(s) > Build APK(s). # # Cada vez que cambies algo en src/ o en main.js, vuelve a lanzarlo: la APK lleva # el backend empaquetado y Android Studio no lo rehace solo. set -euo pipefail HERE="$(cd "$(dirname "$0")/.." && pwd)" # android/ REPO="$(cd "$HERE/.." && pwd)" # raiz del repo UPSTREAM="${OASIS_UPSTREAM:-$REPO/../upstream}" say() { printf '\n== %s\n' "$*"; } die() { printf '\n!! %s\n' "$*" >&2; exit 1; } for cmd in git node curl zip unzip; do command -v "$cmd" >/dev/null || die "falta '$cmd': instalalo y vuelve a lanzarlo" done # --- 1) el Oasis oficial, en el mismo commit que src/ ----------------------------- COMMIT="$(cat "$REPO/.upstream-commit")" if [ ! -d "$UPSTREAM/.git" ]; then say "clonando el Oasis oficial en $UPSTREAM (unos 300 MB, solo la primera vez)" git clone https://github.com/epsylon/oasis "$UPSTREAM" fi if [ "$(git -C "$UPSTREAM" rev-parse HEAD)" != "$COMMIT" ]; then say "poniendo el Oasis oficial en el commit $COMMIT" git -C "$UPSTREAM" fetch --quiet origin || true git -C "$UPSTREAM" checkout --quiet "$COMMIT" fi # --- 2) el APK oficial de la misma version ---------------------------------------- VERSION="$(node -p "require('$REPO/src/server/package.json').version")" BASE="$HERE/native/oasis-v$VERSION.apk" if [ ! -f "$BASE" ]; then say "descargando el APK oficial $VERSION (unos 50 MB, solo la primera vez)" mkdir -p "$HERE/native" curl -fL --progress-bar -o "$BASE.part" \ "https://github.com/epsylon/oasis/releases/download/oasis-android-v$VERSION/oasis-v$VERSION.apk" \ || die "no se ha podido descargar el APK oficial de la $VERSION" mv "$BASE.part" "$BASE" fi # --- 3) librerias y backend -------------------------------------------------------- say "empaquetando el backend (un minuto o dos)" OASIS_UPSTREAM="$UPSTREAM" "$HERE/scripts/prepare.sh" "$BASE" cat < Open > $HERE 2. espera a que termine el Gradle Sync (la primera vez descarga bastante) 3. Build > Build App Bundle(s) / APK(s) > Build APK(s) La APK sale en: $HERE/app/build/outputs/apk/debug/app-debug.apk Si cambias algo en src/ o en main.js, vuelve a lanzar este script antes de compilar. EOF