android: fijar HOME y reutilizar el node_modules podado del APK base

main.js resuelve el directorio de datos con process.env.HOME || resolve(__dirname,
'..','..'). En Android HOME suele llegar como "/", que no es escribible, asi que el
servicio lo fija explicitamente con Os.setenv al almacenamiento privado de la app:
ahi cuelga ~/.ssb. Tambien fija TMPDIR.

prepare.sh deja de pedir un npm install: saca el node_modules del APK base, que
viene podado —137 MB frente a los 1,4 GB de una instalacion de escritorio— y
sustituye solo el codigo. Es seguro porque las 98 dependencias son identicas entre
0.9.1 y 0.9.5: ninguna nueva, ninguna quitada, ninguna con version distinta.
El zip se comprime; sin comprimir el backend son 145 MB y la APK se iria por encima
de 200.

APK generada y verificada: 78 MB, net.laenre.oasis, versionName 0.9.5, targetSdk 35,
con libnode.so y el backend de 32 MB dentro.
This commit is contained in:
SITO 2026-08-18 23:35:19 +02:00
parent 32f6d2269c
commit 7459644a73
2 changed files with 44 additions and 15 deletions

View file

@ -37,22 +37,41 @@ if [ "$missing" = "1" ]; then
echo "librerias nativas copiadas:"; ls -la "$JNI" | tail -n +2 | awk '{print " "$NF" ("$5" bytes)"}'
fi
# --- 2) dependencias del backend ---------------------------------------------
if [ ! -d "$REPO/src/server/node_modules" ]; then
echo "Faltan las dependencias del backend. Instalalas antes:"
echo " (cd $REPO/src/server && npm install)"
# --- 2) backend + dependencias ---------------------------------------------
# El node_modules del movil esta podado: son ~137 MB frente a los 1,4 GB de una
# instalacion de escritorio. En vez de reinstalarlo, se reutiliza el del APK base:
# comprobado que las 98 dependencias son identicas entre 0.9.1 y 0.9.5.
BASE_ZIP=""
if [ -n "$SRC" ] && [ -f "$SRC" ]; then
tmpz="$(mktemp -d)"; unzip -qo "$SRC" 'assets/nodejs-project.zip' -d "$tmpz" 2>/dev/null || true
[ -f "$tmpz/assets/nodejs-project.zip" ] && BASE_ZIP="$tmpz/assets/nodejs-project.zip"
fi
work="$(mktemp -d)"
if [ -n "$BASE_ZIP" ]; then
( cd "$work" && unzip -q "$BASE_ZIP" )
mv "$work/nodejs-project/src/server/node_modules" "$work/_nm"
rm -rf "$work/nodejs-project/src"
elif [ -d "$REPO/src/server/node_modules" ]; then
mkdir -p "$work/nodejs-project"
cp -r "$REPO/src/server/node_modules" "$work/_nm"
else
echo "No hay node_modules. Pasa un APK base del que sacarlo, o instalalas:"
echo " (cd $REPO/src/server && npm install --omit=dev)"
exit 1
fi
# --- 3) empaquetar el backend -------------------------------------------------
# Sin comprimir (-0): el zip se descomprime en el arranque y asi va mas rapido.
tmp="$(mktemp -d)"
mkdir -p "$tmp/nodejs-project"
cp "$REPO/main.js" "$tmp/nodejs-project/" 2>/dev/null || true
cp "$REPO/package.json" "$tmp/nodejs-project/" 2>/dev/null || true
cp -r "$REPO/src" "$tmp/nodejs-project/"
( cd "$tmp" && zip -0 -q -r "$ASSETS/nodejs-project.zip" nodejs-project )
rm -rf "$tmp"
mkdir -p "$work/nodejs-project"
cp -r "$REPO/src" "$work/nodejs-project/"
cp "$REPO/main.js" "$REPO/package.json" "$work/nodejs-project/" 2>/dev/null || true
rm -rf "$work/nodejs-project/src/server/node_modules"
mv "$work/_nm" "$work/nodejs-project/src/server/node_modules"
# --- 3) empaquetar ------------------------------------------------------------
# Con compresion: sin ella el backend son ~145 MB y la APK se iria por encima de 200.
rm -f "$ASSETS/nodejs-project.zip"
( cd "$work" && zip -q -r "$ASSETS/nodejs-project.zip" nodejs-project )
rm -rf "$work" "${tmpz:-/nonexistent}"
echo "backend empaquetado: $(du -h "$ASSETS/nodejs-project.zip" | cut -f1) en assets/nodejs-project.zip"
echo
echo "Listo. Ahora: ./gradlew assembleRelease"
echo "Listo. Ahora: ./gradlew assembleDebug (o assembleRelease para firmar)"