What happened
An app that imports only perry/ui is linked without perry-stdlib (Linking (runtime-only)...) and fails to load with UnsatisfiedLinkError.
What you expected
The app starts.
Minimal reproduction
import { App, Text } from 'perry/ui';
App({ title: 'ui-only', width: 320, height: 640, body: Text('hello') });
Command you ran:
perry main.ts -o libperry_app.so --target android
# packaged with crates/perry-ui-android/template, installed and launched on the emulator
Environment
- Perry version: 0.5.1591 (193889d)
- Host OS: Debian bookworm x86_64
- Target: android (API 34 emulator)
- Rust toolchain (if building from source): nightly-2026-08-20
- Installed via: from source
Diagnostic output
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "perry_ffi_native_async_new" referenced by ".../lib/arm64-v8a/libperry_app.so"
Anything else
libperry_ui_android.a references the perry_ffi_* shims, which are declared in perry-ffi and defined only in perry-stdlib. Linux UI builds already force-link stdlib (build_and_run.rs#L492-L493), as do nativeLibrary manifests (run_pipeline.rs#L2444-L2460); Android has no equivalent. Workaround: void new Headers();.
What happened
An app that imports only
perry/uiis linked without perry-stdlib (Linking (runtime-only)...) and fails to load withUnsatisfiedLinkError.What you expected
The app starts.
Minimal reproduction
Command you ran:
perry main.ts -o libperry_app.so --target android # packaged with crates/perry-ui-android/template, installed and launched on the emulatorEnvironment
Diagnostic output
Anything else
libperry_ui_android.areferences theperry_ffi_*shims, which are declared in perry-ffi and defined only in perry-stdlib. Linux UI builds already force-link stdlib (build_and_run.rs#L492-L493), as do nativeLibrary manifests (run_pipeline.rs#L2444-L2460); Android has no equivalent. Workaround:void new Headers();.