DioxusLabs/dioxus · error
Invalid asset manager
Error message
Invalid asset manager
What it means
Android panic in to_java_load_asset: AAssetManager_fromJava returned NULL, so a native ndk AssetManager could not be constructed from the Java reference; the code expects a non-null pointer via NonNull::new.
Source
Thrown at packages/asset-resolver/src/native.rs:287
// Query the Asset Manager
let asset_manager_ptr = env
.call_method(
unsafe { jni::objects::JObject::from_raw(ctx.context().cast()) },
"getAssets",
"()Landroid/content/res/AssetManager;",
&[],
)
.expect("Failed to get asset manager")
.l()
.expect("Failed to get asset manager as object");
unsafe {
let asset_manager =
ndk_sys::AAssetManager_fromJava(env.get_native_interface(), *asset_manager_ptr);
let asset_manager = ndk::asset::AssetManager::from_ptr(
NonNull::new(asset_manager).expect("Invalid asset manager"),
);
let cstr = std::ffi::CString::new(normalized).unwrap();
let mut asset = asset_manager.open(&cstr)?;
Some(asset.buffer().unwrap().to_vec())
}
}
View on GitHub (pinned to 393d190a80)
Solutions
- Let dioxus resolve assets through its own JNI path on the same thread immediately after obtaining the context
- Avoid caching Java AssetManager references across events or threads
- Keep the standard dioxus Android launch flow instead of custom asset manager plumbing
Defensive patterns
Strategy: validation
Prevention
- Resolve assets on the thread that obtained the Android context instead of caching references
- Do not store Java AssetManager references across events or threads
- Prefer dioxus's own asset path over hand-rolled JNI asset plumbing
When it happens
Trigger: Passing a stale or wrong Java object to AAssetManager_fromJava: an AssetManager whose local JNI reference expired, or a manager from a different context lifetime/classloader than assumed.
Common situations: Caching the Java AssetManager reference across events/threads so the local reference dies; custom asset plumbing bypassing dioxus; app teardown edge cases where the manager is already destroyed.
Related errors
- Failed to get asset manager
- Failed to get asset manager as object
- expected URL to be UTF-8 encoded
- Head element to exist
- Body element to exist
AI-assisted analysis of DioxusLabs/dioxus@393d190a80 (2026-08-16).
Data as JSON: /api/errors/14667a52cb0f8ee1.
Report an issue: GitHub.