mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
Two small pieces, so an Android spawn arm is a flag rather than a project. THE RUNNER GAINS --transport. It already had a generic env passthrough - one intent extra carries `K=V;K=V` all the way to setenv before the library is dlopened - so the transport itself costs one entry and no new plumbing in the five files between here and the device. monolith passes NOTHING rather than MOBILEGL_TRANSPORT=monolith, so the default arm's environment stays byte-identical to what it was before this option existed: a control that changed when the option landed would not be one. THE SERVER PATH CANNOT COME FROM THE HOST. Every other knob can, but this one names a file that must be EXEC-ABLE, and on Android there is exactly one such place: an APK's lib/<abi>/. W^X has forbidden the app's own data dirs since API 29, and the packager only puts a file in lib/<abi>/ if it is named lib*.so - which is why the server executable wears that name, and what P0 spike A proved on two devices. nativeLibraryDir contains an install-time hash, so no host-side script can spell the path; the process about to launch the server is the only one that can. TraceReplayActivity resolves it, and only when the caller actually asked for spawn. AN EXPLICIT MOBILEGL_IPC_SERVER_PATH STILL WINS. A caller that set one is pointing somewhere deliberately - at a pushed build, say - and silently replacing it would make that knob untestable on the one platform where it matters most. The APK must be built with -Pmobilegl.buildDisaggregated=ON or none of this is reachable: without it ConfigLoader has no transport parser, accepts the value, ignores it (CONTRACT-P5 rule 5), and the run is monolith under a name that says spawn. The --transport help says so where somebody will read it.