The Android template asked the installer to extract and copy every .so
out of the APK at install time. Since Android 6.0 the loader can map
them straight from an uncompressed, page-aligned APK, which is smaller
on disk, faster to install, and — the reason it matters here — the only
form in which a 16 KB-page-aligned library stays aligned. Play requires
16 KB page support for apps targeting API 35+, so the extracted path is
now a correctness problem, not only a size one.
The generated project shipped AGP 8.7.0 against the Gradle 8.13 wrapper,
a pair Gradle 9.1.0 does not accept: AGP 8.7 predates Gradle 9 and its
configuration fails outright. Move both to the newest matched pair that
AGP documents (8.13.0 requires Gradle 8.13+), which is also the first
AGP that builds cleanly against compileSdk 36.
Kotlin stays at 2.0.20 deliberately: the template's app build script
still uses the removed `kotlinOptions` block, so a KGP 2.2.x bump needs
that rewritten first.
JNIEnv::find_class resolves against the system classloader on a thread
attached from native code, which cannot see APK classes (#5629). Route
the generated #[manganis::ffi] type lookup through
load_class_from_classloader, and reimplement that helper to ask the
activity's own ClassLoader.loadClass instead of Class.forName.
Ask the activity INSTANCE, not its Class: Context.getClassLoader() is
documented to return a loader for the application package
unconditionally, whereas Class.getClassLoader() returns null for classes
loaded by the bootstrap loader.
Describe and clear the pending Java exception on every error path. jni
0.21 leaves the exception pending when a call returns Err, and the next
JNI call then aborts the process with 'JNI DETECTED ERROR IN
APPLICATION: ... called with pending exception' -- which is what turns a
recoverable ClassNotFoundException into an unreadable ART abort.
* feat:Add opt‑in navigation handler for external URLs (#5531)
* add navigation handler config option
code from https://github.com/DioxusLabs/dioxus/pull/5231
* Re-order branches
The branches should be reorder so that the branch that checks for
the index and assets is always taken first. Otherwise, they will
fail to load for users who forget to allow them in their custom
handlers, which will be a crappy experience and hard to debug.
* remove return
* Change behavior when handler not set
---------
Co-authored-by: not a cow <agielow@proton.me>
* fix: allow navigations but disallow external nav
---------
Co-authored-by: Martin Martinez Rivera <mrtnz.rvr@gmail.com>
Co-authored-by: not a cow <agielow@proton.me>
* default icon
* cli
* fix typos, fmt + icon fix
I don't think it's a good idea to do
[default.extend-words]
fo = "fo"
as it's a very common mispelling for 'for'
* fix clippy
* return error on non implemented platforms instead of default dx icon
* fix
* fix
fix the amazing merge
renamed winres to windows
moved windows winres build request to windows
* fix typos
* fix schema
* Update schema.json
* fix schema again
* use default icon if no fallback
* wire up the rest of windows
* fmt
---------
Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
* test: add failing idempotency tests for commented-out RSX blocks
Two variants of the regression introduced in v0.7.4 (#5257):
- commented_rsx_block: first line keeps indent, rest gets dedented
- commented_rsx_block_nested: entire block gets dedented
See #5463
* fix(autofmt): preserve indentation of commented-out RSX blocks
Trailing comments before `}` in write_rsx_block were indented at
parent level instead of child level. Truncate the tab from
tabbed_line() and bump indent to child level before
apply_line_comments, same approach as write_trailing_body_comments.
Fixes#5463
* fix(cli): display user-specified address in serve output
When running `dx serve --addr 0.0.0.0`, the CLI was overriding the
displayed address to 127.0.0.1. This was confusing for users who
explicitly chose 0.0.0.0 and expected the output to reflect their
choice. The default (127.0.0.1) is unchanged when no --addr flag is
given.
Fixes#5477
* fix(cli): resolve actual network IP when bound to 0.0.0.0
Instead of showing the unroutable 0.0.0.0, use the UDP socket trick
to resolve the machine's primary network address for a clickable URL.
Falls back to 127.0.0.1 when resolution fails (no network, etc).
* style: apply rustfmt to test function calls
* fit longer urls in tui frame
* space
---------
Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
* Suggested method for correcting integration tests
* Use static atomics for simplicity
This is consistent with the test immediately below.
* Add assertions to some tests, comments to others
This should fix a handful of tests that didn't correctly do their test.
In other places, comments should make it clearer *why* tests are how
they are.
* Be consistent with existing imports
* remove bad test
* nit
* fix compile errrs
---------
Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
* it works!
* fix wasm hotpatch error
* bump wasmopt
* rename wasmopt flag
* rename ldd_keep_exports
* add build profiling
* undo bundle ignore
* some cleanups
* more cleanups
* wip: hoist up telemetry to builder
* fix compile
* wip: flamegraph rewrite
* clean up flamegraph impl
* cleanup profiling engine
* add comment on spans obj
* cleanup more phases
* more cleanup
* small cleanups
* bit more cleanups
* cleanup phases
* sign with tokio, not std proc
* split out the specific platform helpers
* cleanup a bit
* more cleanups
* more cleanups
* more cleanups
* more cleanups
* pull out fingerprint logic
* wip... I think I have a slightly better approach. saving checkpoint
* hm I think it's better now?
* fix: also seems to work not in workspace mode juuust yet
* okay yay almost there
* clooose but not there yet
* fix: manually export __wasm_apply_data_relocs since got relocations weren't firing
WASM workspace hotpatching: export __wasm_apply_global_relocs to fix call_indirect type mismatch
When workspace crates are recompiled with -Crelocation-model=pic for hotpatching, wasm-ld generates GOT.func.internal globals that hold element-segment-relative offsets (e.g., MetricCardProps::memoize = 31). These need __table_base added at runtime by __wasm_apply_global_relocs to become absolute table indices.
wasm-ld generates __wasm_apply_global_relocs but treats it as an internal synthetic function -- neither --export nor --export-if-defined will export it. Without the export, the runtime's call silently failed (the old code used unchecked_into on undefined), leaving the globals unrelocated. Function pointers then pointed to index 31 in the original module's table (some unrelated function) instead of table_base + 31 (the patched function), causing call_indirect to a signature that does not match.
Three changes:
patch.rs: After walrus processing, find __wasm_apply_global_relocs by name and add it as an export before emitting the patched wasm.
lib.rs: Replace unchecked_into with dyn_into for calling relocation functions, so missing exports are handled gracefully instead of silently swallowed.
link.rs: Remove the ineffective --export-if-defined flags that were added during debugging.
* cleanup
* fix scope dir
* change up naming a bit
* more tidying up
* more cleanups
* ignore early return
* clean er up
* more comprehensive cache bustign
* bust fingerprints of dag
* move bust_fingerprint back to request.rs
* add better rustdoc
* more idiomatic
* more cleanups
* fix panic, typos
* more lints
* only delete workspace prints in fat mod
* clippy
* add tests
* fix: include root node when store is marked dirty
* fix tracking deep subscriptions. We need to walk all parents for deep subscriptions instead of relying on tracking all children recursively during the initial read since some children may not exist yet
* avoid double notifying parents when children re-visit parents in deep mark dirty
---------
Co-authored-by: Evan Almloff <evanalmloff@gmail.com>
Add the `inert` boolean attribute to the global HTML attribute
group and to the SSR boolean attributes list. This allows users
to set `inert` on any HTML element, matching the HTML spec.
Fixes#5455
* feat: add blanket IntoAttributeValue impl for references
Adds `impl<T: IntoAttributeValue + Clone> IntoAttributeValue for &T` so
users don't need to explicitly dereference or clone when passing references
to RSX attributes.
Closes#5444
* use to-owned
---------
Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
* fix autofill events
* ignore the wrong type of event like we do in desktop
* check the event type before dispatch instead of panicing on downcast
* clean up conversion
* remove example
* pull out shared event list
* pull in deserialize_raw
* unified event list
* prettier comment
* restore test
* restore alias
* normal doc comments
* move over comments
* minimize diff
* remove alias, was moved into the macro
By using the `permissions()` method of `FileOptionsBuilder`,
which was added in version 0.20.0 of the `rpm` crate, we fix
a bug where newer versions of `rpm` (the package, not the
crate) would fail when installing the bundle.
The post-handler redirect logic was unconditionally converting responses
to 302 Found when the request had Accept: text/html and a Referer header.
This overwrote error status codes (4xx, 5xx), making it impossible to
return errors from #[get] endpoints accessed via browser navigation.
Add a response.status().is_success() guard so only successful responses
get the Post/Redirect/Get treatment.
Fixes#5428