feat: target arm64-only and adopt proroot backend - #3
Merged
Conversation
Trim the app to 64-bit ARM (Snapdragon / arm64-v8a) and replace the proot launcher with proroot (coderredlab/proroot), a drop-in proot-compatible launcher with zero ptrace overhead. ABI trim: - app: add ndk abiFilters = [arm64-v8a]; raise minSdk 21 -> 26 - core, proot-plugin: raise minSdk 21 -> 26 - BootstrapResolver.defaultVariants() reduced to arm64-v8a only; armeabi-v7a and x86_64 intentionally dropped (proroot ships arm64-v8a only) proroot backend: - proot-plugin default launcher is now libproroot.so (was proot) - inject PROROOT_TMP_DIR (app files dir) into the session environment - keep proot-compatible flags (--link2symlink, -0) - add app/src/main/jniLibs/arm64-v8a/ with a README; .so files are fetched from proroot Releases, not committed (gitignored) Docs: AUDIT.md ABI matrix + proroot section, upstream-sync.md proroot upstream, AGENTS.md proot section, README module + ABI notes. Tests: resolver/assets updated to arm64-only expectations, plus an UNSUPPORTED_ABI test for dropped ABIs; proot-plugin test updated to proroot launcher/backend/PROROOT_TMP_DIR. Verified locally (JDK 17, SDK 36): compile + assembleDebug succeed; abiFilters proven to package arm64-v8a only. The 5 core/proot session tests that require preserved executable bits fail only in this sandbox (identical on main) and pass in remote CI.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two coordinated changes, per the approved plan:
ABI trim
app/build.gradle.kts: addndk { abiFilters += "arm64-v8a" }; raiseminSdk21 → 26core+proot-plugin: raiseminSdk21 → 26 (compileSdk/targetSdkstay 36)iTermuxBootstrapResolver.defaultVariants(): reduced toarm64-v8aonlyarmeabi-v7aandx86_64— proroot ships an arm64-v8a launcher exclusively. This also drops x86_64 emulator support (intentional).proroot backend
:proot-plugindefault launcher is nowlibproroot.so(wasproot)PROROOT_TMP_DIR(app files dir) into the session environment--link2symlink,-0)app/src/main/jniLibs/arm64-v8a/with a README. The five proroot.sofiles are fetched from proroot Releases, not committed (gitignored) — consistent with the no-committed-payloads policy.Docs
AUDIT.md(ABI matrix + proroot section),docs/upstream-sync.md(proroot as a binary-dependency upstream),AGENTS.md(proot review section),README.md(module + ABI notes).Verification (local, JDK 17 + SDK 36)
:app:compileDebugKotlin,:proot-plugin:compileDebugKotlin— pass:app:assembleDebug— APK produced; badging:com.nidrzero.atomux, labelAtomux, SDK 36.sointo botharm64-v8aandx86_64— onlylib/arm64-v8a/was packagedUNSUPPORTED_ABIcase) — passNote on local test failures
5 session tests (4 in
:core, 1 in:proot-plugin) require preserved file executable bits to reach aRUNNING/started runtime state. They fail only in the ephemeral build sandbox (verified identical on cleanmain) and pass in remote CI, which preserves exec bits. The CI check on this PR is the authoritative signal.Constraints honored
No force-push,
mainuntouched. Branched frommain; opened as its own PR.Follow-up (not in this PR)
A real arm64-v8a bootstrap payload and the proroot
.soset still need to be supplied before an on-device cold start works.