Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bevy mobile example crashes on Android #13331

Closed
FabianZeuner opened this issue May 11, 2024 · 2 comments · Fixed by #13366
Closed

bevy mobile example crashes on Android #13331

FabianZeuner opened this issue May 11, 2024 · 2 comments · Fixed by #13366
Labels
C-Dependencies A change to the crates that Bevy depends on O-Android Specific to the Android mobile operating system P-Crash A sudden unexpected crash S-Needs-Review Needs reviewer attention (from anyone!) to move forward
Milestone

Comments

@FabianZeuner
Copy link

FabianZeuner commented May 11, 2024

Developing on:

  • Ubuntu 22.04
  • rustup 1.27.1
  • rust 1.78.0 nightly
  • cargo 1.78.0
  • adb 1.0.41
  • javac 11.0.22
  • java 11.0.22
  • gradle 8.7

Building for device:

  • Samsung Galaxy Note20 5G
  • Android version: 13

I'm trying run the bevy mobile example on my android phone.

What I do:

  • I clone bevy repository from GitHub and follow the instructions how to setup and run the example on Android.
  • Run cargo apk run -p bevy_mobile_example in the repository root directory.
  • Apk is build successfully and installed to my device.
  • The app opens and shows a splash screen with bevy logo for a second before the app closes.

The first lines of output are:

--------- beginning of crash
05-11 22:18:50.644 15057 15057 F libc    : Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 15057 (yengine.example), pid 15057 (yengine.example)
05-11 22:18:50.662 15057 15165 I RustStdoutStderr: thread '<unnamed>' panicked at library/core/src/panicking.rs:156:5:
05-11 22:18:50.663 15057 15165 I RustStdoutStderr: unsafe precondition(s) violated: slice::from_raw_parts requires the pointer to be aligned and non-null, and the total size of the slice not to exceed `isize::MAX`
05-11 22:18:50.663 15057 15165 I RustStdoutStderr: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
05-11 22:18:50.663 15057 15165 I RustStdoutStderr: thread caused non-unwinding panic. aborting.

I also tried building bevy with xbuild and with other target sdk (32, 33), but with the same result.

@FabianZeuner FabianZeuner added C-Bug An unexpected or incorrect behavior S-Needs-Triage This issue needs to be labelled labels May 11, 2024
@mockersf
Copy link
Member

This is due to rust-mobile/android-activity#153

It should be fixed by updating winit.

As a workaround, you can use either rust 1.77 or nightly-2024-02-08

@mockersf mockersf added P-Crash A sudden unexpected crash C-Dependencies A change to the crates that Bevy depends on O-Android Specific to the Android mobile operating system and removed C-Bug An unexpected or incorrect behavior S-Needs-Triage This issue needs to be labelled labels May 11, 2024
@mockersf mockersf added this to the 0.14 milestone May 11, 2024
@alice-i-cecile alice-i-cecile added the S-Needs-Review Needs reviewer attention (from anyone!) to move forward label May 16, 2024
@blaind
Copy link
Contributor

blaind commented May 17, 2024

Another workaround: patching android-activity in Cargo.toml and modifying it with the following commit: https://github.com/rust-mobile/android-activity/pull/157/files

github-merge-queue bot pushed a commit that referenced this issue May 17, 2024
…3413)

# Objective

- Rust 1.78 breaks all Android support, see
#13331
- We should not bump the MSRV to 1.78 until that's resolved in #13366.

## Solution

- Temporarily revert #13347

Co-authored-by: Alice Cecile <alice.i.cecil@gmail.com>
github-merge-queue bot pushed a commit that referenced this issue Jun 3, 2024
# Objective

- Upgrade winit to v0.30
- Fixes #13331

## Solution

This is a rewrite/adaptation of the new trait system described and
implemented in `winit` v0.30.

## Migration Guide

The custom UserEvent is now renamed as WakeUp, used to wake up the loop
if anything happens outside the app (a new
[custom_user_event](https://github.com/bevyengine/bevy/pull/13366/files#diff-2de8c0a8d3028d0059a3d80ae31b2bbc1cde2595ce2d317ea378fe3e0cf6ef2d)
shows this behavior.

The internal `UpdateState` has been removed and replaced internally by
the AppLifecycle. When changed, the AppLifecycle is sent as an event.

The `UpdateMode` now accepts only two values: `Continuous` and
`Reactive`, but the latter exposes 3 new properties to enable reactive
to device, user or window events. The previous `UpdateMode::Reactive` is
now equivalent to `UpdateMode::reactive()`, while
`UpdateMode::ReactiveLowPower` to `UpdateMode::reactive_low_power()`.

The `ApplicationLifecycle` has been renamed as `AppLifecycle`, and now
contains the possible values of the application state inside the event
loop:
* `Idle`: the loop has not started yet
* `Running` (previously called `Started`): the loop is running
* `WillSuspend`: the loop is going to be suspended
* `Suspended`: the loop is suspended
* `WillResume`: the loop is going to be resumed

Note: the `Resumed` state has been removed since the resumed app is just
running.

Finally, now that `winit` enables this, it extends the `WinitPlugin` to
support custom events.

## Test platforms

- [x] Windows
- [x] MacOs
- [x] Linux (x11)
- [x] Linux (Wayland)
- [x] Android
- [x] iOS
- [x] WASM/WebGPU
- [x] WASM/WebGL2

## Outstanding issues / regressions

- [ ] iOS: build failed in CI
   - blocking, but may just be flakiness
- [x] Cross-platform: when the window is maximised, changes in the scale
factor don't apply, to make them apply one has to make the window
smaller again. (Re-maximising keeps the updated scale factor)
    - non-blocking, but good to fix
- [ ] Android: it's pretty easy to quickly open and close the app and
then the music keeps playing when suspended.
    - non-blocking but worrying
- [ ]  Web: the application will hang when switching tabs
- Not new, duplicate of #13486
- [ ] Cross-platform?: Screenshot failure, `ERROR present_frames:
wgpu_core::present: No work has been submitted for this frame before`
taking the first screenshot, but after pressing space
    - non-blocking, but good to fix

---------

Co-authored-by: François <francois.mockers@vleue.com>
knutsoned pushed a commit to knutsoned/bevy that referenced this issue Jun 25, 2024
- Upgrade winit to v0.30
- Fixes bevyengine#13331

This is a rewrite/adaptation of the new trait system described and
implemented in `winit` v0.30.

The custom UserEvent is now renamed as WakeUp, used to wake up the loop
if anything happens outside the app (a new
[custom_user_event](https://github.com/bevyengine/bevy/pull/13366/files#diff-2de8c0a8d3028d0059a3d80ae31b2bbc1cde2595ce2d317ea378fe3e0cf6ef2d)
shows this behavior.

The internal `UpdateState` has been removed and replaced internally by
the AppLifecycle. When changed, the AppLifecycle is sent as an event.

The `UpdateMode` now accepts only two values: `Continuous` and
`Reactive`, but the latter exposes 3 new properties to enable reactive
to device, user or window events. The previous `UpdateMode::Reactive` is
now equivalent to `UpdateMode::reactive()`, while
`UpdateMode::ReactiveLowPower` to `UpdateMode::reactive_low_power()`.

The `ApplicationLifecycle` has been renamed as `AppLifecycle`, and now
contains the possible values of the application state inside the event
loop:
* `Idle`: the loop has not started yet
* `Running` (previously called `Started`): the loop is running
* `WillSuspend`: the loop is going to be suspended
* `Suspended`: the loop is suspended
* `WillResume`: the loop is going to be resumed

Note: the `Resumed` state has been removed since the resumed app is just
running.

Finally, now that `winit` enables this, it extends the `WinitPlugin` to
support custom events.

- [x] Windows
- [x] MacOs
- [x] Linux (x11)
- [x] Linux (Wayland)
- [x] Android
- [x] iOS
- [x] WASM/WebGPU
- [x] WASM/WebGL2

- [ ] iOS: build failed in CI
   - blocking, but may just be flakiness
- [x] Cross-platform: when the window is maximised, changes in the scale
factor don't apply, to make them apply one has to make the window
smaller again. (Re-maximising keeps the updated scale factor)
    - non-blocking, but good to fix
- [ ] Android: it's pretty easy to quickly open and close the app and
then the music keeps playing when suspended.
    - non-blocking but worrying
- [ ]  Web: the application will hang when switching tabs
- Not new, duplicate of bevyengine#13486
- [ ] Cross-platform?: Screenshot failure, `ERROR present_frames:
wgpu_core::present: No work has been submitted for this frame before`
taking the first screenshot, but after pressing space
    - non-blocking, but good to fix

---------

Co-authored-by: François <francois.mockers@vleue.com>
maxammann added a commit to maxammann/maplibre-rs that referenced this issue Jul 3, 2024
maxammann added a commit to maplibre/maplibre-rs that referenced this issue Jul 4, 2024
* Update winit and wgpu which both target rwh 0.6

* Upgrade to winit 0.30 to fix android crash bevyengine/bevy#13331

* Add Carbon framework to desktop builds and improve build script to use nix if available

* Fix swift package and compilaiton with Nix

* Cleanup nix shell

* Avoid setting the size on the canvas, winit resizes now

* Handle fetch errors for web
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-Dependencies A change to the crates that Bevy depends on O-Android Specific to the Android mobile operating system P-Crash A sudden unexpected crash S-Needs-Review Needs reviewer attention (from anyone!) to move forward
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants