diff --git a/README.md b/README.md index 38f3963..235cb1e 100644 --- a/README.md +++ b/README.md @@ -161,6 +161,18 @@ descomprime el servidor. ### Compilar +**Con Android Studio**, lo más fácil: + +```sh +./android/scripts/android-studio.sh # trae el Oasis oficial y su APK, y empaqueta el backend +``` + +Después, en Android Studio: *File → Open →* la carpeta `android/`, esperar al Gradle +Sync, y *Build → Build App Bundle(s) / APK(s) → Build APK(s)*. Si cambias algo en +`src/` o en `main.js`, vuelve a lanzar el script antes de compilar. + +**Desde la terminal**, paso a paso: + ```sh cd android # la primera vez hace falta la APK oficial de la MISMA versión (ahora la 1.3.3): diff --git a/android/README.md b/android/README.md index 7e93ac2..18b4815 100644 --- a/android/README.md +++ b/android/README.md @@ -57,6 +57,10 @@ el NDK. ## Construir +Con Android Studio basta con `./scripts/android-studio.sh`: clona el Oasis oficial, +descarga su APK de la misma version y empaqueta el backend. Luego *File > Open >* +esta carpeta y *Build > Build APK(s)*. A mano, paso a paso: + ```sh # 1. dependencias del backend (una vez) (cd ../src/server && npm install) diff --git a/android/scripts/android-studio.sh b/android/scripts/android-studio.sh new file mode 100755 index 0000000..8380130 --- /dev/null +++ b/android/scripts/android-studio.sh @@ -0,0 +1,76 @@ +#!/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