Skip to content

ui(android): a perry/ui-only app fails to load because perry-stdlib is not linked #10549

Description

@keufcp

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();.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugConfirmed defect or regression

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions