diff --git a/examples/android/Cargo.toml b/examples/android/Cargo.toml index ef9e36c..80e43ad 100644 --- a/examples/android/Cargo.toml +++ b/examples/android/Cargo.toml @@ -29,7 +29,7 @@ target_sdk_version = 32 # label = "Bevy Example" [dependencies] -bevy_openxr = { path = "../.." } +bevy_openxr = { path = "../..", default-features = false } bevy = { git = "https://github.com/bevyengine/bevy.git" } openxr = { git = "https://github.com/Ralith/openxrs", features = ["mint"] } diff --git a/examples/android/README.md b/examples/android/README.md index 9ef2fd1..801a9ad 100644 --- a/examples/android/README.md +++ b/examples/android/README.md @@ -1,6 +1,46 @@ # Bevy OpenXR Android example -Running on Meta Quest can be done with https://github.com/rust-mobile/cargo-apk and requires disabling default features. +## Setup +Get libopenxr_loader.so from the Oculus OpenXR Mobile SDK and add it to `examples/android/runtime_libs/arm64-v8a` +https://developer.oculus.com/downloads/package/oculus-openxr-mobile-sdk/ +`examples/android/runtime_libs/arm64-v8a/libopenxr_loader.so` + +Running on Meta Quest can be done with https://github.com/rust-mobile/cargo-apk. ```sh cargo apk run --release -``` \ No newline at end of file +``` + +## Notes + +### Relase mode +More optimisations enabled in Cargo.toml for the release mode. +This gives more performance but longer build time. +```toml +[profile.release] +lto = "fat" +codegen-units = 1 +panic = "abort" +``` + +### Cargo apk +If you see error like `Error: String `` is not a PID`, try to install cargo apk with a fix in branch. +```sh +cargo install --git https://github.com/rust-mobile/cargo-apk --branch=adb-logcat-uid +``` + +### Temporary JNIEnv log +This message is logged every frame. It's not yet fixed. +```sh +I JniUtils-inl: Creating temporary JNIEnv. This is a heavy operation and should be infrequent. To optimize, use JNI AttachCurrentThread on calling threa +``` + +### Android keystore +Release mode requires keystore. See Cargo.toml `package.metadata.android.signing.release`. + +When creating your own apps, make sure to generate your own keystore, rather than using our example one! +You can use `keytool` like so: +```sh +keytool -genkey -v -keystore my-release-key.keystore -keyalg RSA -keysize 2048 -validity 10000 +``` +For more information on key signing and why it's so important, check out this article: +https://developer.android.com/studio/publish/app-signing \ No newline at end of file diff --git a/src/graphics/vulkan.rs b/src/graphics/vulkan.rs index a6c525b..115b583 100644 --- a/src/graphics/vulkan.rs +++ b/src/graphics/vulkan.rs @@ -85,8 +85,16 @@ pub fn initialize_xr_graphics( let blend_mode = xr_instance.enumerate_environment_blend_modes(xr_system_id, VIEW_TYPE)?[0]; + #[cfg(not(target_os = "android"))] let vk_target_version = vk::make_api_version(0, 1, 2, 0); + #[cfg(not(target_os = "android"))] let vk_target_version_xr = xr::Version::new(1, 2, 0); + + #[cfg(target_os = "android")] + let vk_target_version = vk::make_api_version(0, 1, 1, 0); + #[cfg(target_os = "android")] + let vk_target_version_xr = xr::Version::new(1, 1, 0); + let reqs = xr_instance.graphics_requirements::(xr_system_id)?; if vk_target_version_xr < reqs.min_api_version_supported || vk_target_version_xr.major() > reqs.max_api_version_supported.major()