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:
parent
32f6d2269c
commit
7459644a73
2 changed files with 44 additions and 15 deletions
|
|
@ -8,6 +8,7 @@ import android.content.Context
|
|||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.IBinder
|
||||
import android.system.Os
|
||||
import android.util.Log
|
||||
import com.solarnethub.oasis.OasisActivity
|
||||
import com.solarnethub.oasis.R
|
||||
|
|
@ -63,7 +64,16 @@ class NodeService : Service() {
|
|||
extractProjectIfNeeded(root)
|
||||
val main = File(root, "main.js")
|
||||
if (!main.exists()) { Log.e(TAG, "no encuentro main.js en ${root.absolutePath}"); return }
|
||||
// HOME cuelga del almacenamiento privado de la app: ahi vive ~/.ssb
|
||||
|
||||
// main.js hace process.env.HOME || resolve(__dirname,'..','..'). En Android HOME
|
||||
// suele venir como "/" —no escribible—, asi que se fija explicitamente al
|
||||
// almacenamiento privado de la app: ahi cuelga ~/.ssb.
|
||||
val home = filesDir.parentFile ?: filesDir
|
||||
val tmp = File(home, "tmp").apply { mkdirs() }
|
||||
Os.setenv("HOME", home.absolutePath, true)
|
||||
Os.setenv("TMPDIR", tmp.absolutePath, true)
|
||||
Log.i(TAG, "HOME=${home.absolutePath}")
|
||||
|
||||
val rc = OasisActivity.startNodeWithArguments(arrayOf("node", main.absolutePath))
|
||||
Log.w(TAG, "el runtime de node ha terminado con codigo $rc")
|
||||
} catch (e: Throwable) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue