soul-browser/AGENTS.md
KaKi87 2bf9232886
Stop spurious libsoulamz commits; gitignore local prebuilts (#78)
* Only commit libsoulamz when input hash changes.

CI compared binary diffs, so non-deterministic Go rebuilds kept
bot-committing identical-size .so files. Compare soulamz.inputs instead,
commit inputs plus force-added libs when native/soulamz changes. Add Go
and NDK on CI so prebuilts can be rebuilt when lib/ is absent.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Gitignore bundled-warp lib prebuilts.

Local soulamz rebuilds are non-deterministic; keep only soulamz.inputs
tracked. CI still force-adds lib/ when inputs change.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-28 17:49:33 +02:00

39 lines
3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AGENTS.md
## Cursor Cloud specific instructions
This repo rebuilds a signed Android APK (Soul Browser / “Soul Rebuild”) from Apktool smali sources. There is **no web server, package manager, or long-running app service**.
### Build (primary workflow)
- Tracked `app/` sources use the **testing** application ID (`net.kaki87.soul2.testing`, Soul2⁺ Browser). Stable releases (`net.kaki87.soul2`) are produced only when CI on `main` sets `SOUL_PACKAGE_ID=net.kaki87.soul2` during the build.
- `app/res/values/build_date.xml` and `app/res/values/soul2_info.xml` are generated at build time (gitignored). INFO screen text comes from the README `<!-- BEGIN INFO -->` block; `scripts/prepare-info-string.py` writes the XML for Apktool.
- `bundled-warp/soulamz.inputs` tracks soulamz source inputs; `bundled-warp/lib/` is gitignored and force-committed on `main` only when inputs change.
- Run `./scripts/build.sh` (see README). Requires Java 21+, `curl`, `zip`/`unzip`, `keytool`, and Android SDK **build-tools** with `apksigner` on `PATH` (or via `ANDROID_HOME` / `ANDROID_SDK_ROOT`).
- In this environment the SDK lives at `$HOME/android-sdk` (build-tools `35.0.0`). Ensure `ANDROID_HOME` / `ANDROID_SDK_ROOT` are set before building.
- Output: signed APK under `dist/` (also intermediate unsigned/aligned copies). Signature schemes v1+v2+v3 are required (targetSdk 36).
- `apktool` JAR is auto-downloaded into `tools/` by the build script; that directory is gitignored.
- There is no separate lint/test suite; the practical checks are a successful `./scripts/build.sh` plus `apksigner verify` on the produced APK.
### Emulator (nested Cloud Agent VMs)
**Do not use `-accel on` / KVM here.** The host hits `kernel BUG at arch/x86/kvm/x86.c` (`kvm_spurious_fault` during `kvm_arch_vcpu_create`). QEMU stays nearly idle and `adb` never leaves `offline`. Always boot with **`-accel off`** (TCG). Cold boot takes roughly 510 minutes.
**ABI:** The APKs native libs are ARM-only. Use **`system-images;android-30;google_apis;x86_64`** (NDK translation; `ro.product.cpu.abilist` includes `arm64-v8a,armeabi-v7a`). API 33 `google_apis` x86_64 fails with `INSTALL_FAILED_NO_MATCHING_ABIS`.
Helper: `./scripts/run-emulator.sh` (creates the `soul_test` AVD if needed, then starts the emulator). Start `adb` first; avoid `pkill -f emulator` (it can kill the calling shell). Prefer `killall qemu-system-x86_64-headless`.
Smoke after boot:
```bash
adb wait-for-device
adb shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 2; done'
adb install -r -g dist/soul-browser-*.apk
adb shell am start -a android.intent.action.VIEW -d 'https://example.com/' \
-n net.kaki87.soul2/com.mycompany.app.web.WebLauncher
# First launch shows onboarding; tap Start (id/splash_apply_view, center ~360,1014 on 720x1280)
```
For non-`main` builds the application ID is `net.kaki87.soul2.testing`. Smoke tests on a stable APK use `net.kaki87.soul2` in the `am start` component name.
System UI may ANR under TCG; dismiss Wait/Close and retry. Prefer build + `apksigner verify` when on-device UI is not required.