From dc9e19ead699c368a9c1cfd1f3e112cc65330f4a Mon Sep 17 00:00:00 2001 From: Ethan O'Brien Date: Sun, 28 Jun 2026 15:04:14 -0500 Subject: [PATCH] Revert jni upgrade --- Cargo.lock | 181 +++++++++++++++++++++++++++++++++++++------------ Cargo.toml | 8 +-- src/android.rs | 77 +++++++++++---------- 3 files changed, 179 insertions(+), 87 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 68697e6..0c396d0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -444,6 +444,12 @@ dependencies = [ "shlex", ] +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + [[package]] name = "cfg-if" version = "1.0.4" @@ -1278,34 +1284,29 @@ dependencies = [ [[package]] name = "jni" -version = "0.22.4" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5efd9a482cf3a427f00d6b35f14332adc7902ce91efb778580e180ff90fa3498" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" dependencies = [ + "cesu8", "cfg-if", "combine", "java-locator", - "jni-macros", - "jni-sys", + "jni-sys 0.3.1", "libloading", "log", - "simd_cesu8", - "thiserror", + "thiserror 1.0.69", "walkdir", - "windows-link", + "windows-sys 0.45.0", ] [[package]] -name = "jni-macros" -version = "0.22.4" +name = "jni-sys" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a00109accc170f0bdb141fed3e393c565b6f5e072365c3bd58f5b062591560a3" +checksum = "41a652e1f9b6e0275df1f15b32661cf0d4b78d4d87ddec5e0c3c20f097433258" dependencies = [ - "proc-macro2", - "quote", - "rustc_version", - "simd_cesu8", - "syn", + "jni-sys 0.4.1", ] [[package]] @@ -1405,12 +1406,12 @@ dependencies = [ [[package]] name = "libloading" -version = "0.8.9" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" dependencies = [ "cfg-if", - "windows-link", + "winapi", ] [[package]] @@ -1877,7 +1878,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8a1f2315036ef6b1fbacd1972e8ee7688030b0a2121edfc2a6550febd41574d" dependencies = [ "hashbrown 0.16.1", - "thiserror", + "thiserror 2.0.18", ] [[package]] @@ -2090,22 +2091,6 @@ version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" -[[package]] -name = "simd_cesu8" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" -dependencies = [ - "rustc_version", - "simdutf8", -] - -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - [[package]] name = "slab" version = "0.4.12" @@ -2200,13 +2185,33 @@ dependencies = [ "syn", ] +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl 1.0.69", +] + [[package]] name = "thiserror" version = "2.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" dependencies = [ - "thiserror-impl", + "thiserror-impl 2.0.18", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -2568,6 +2573,22 @@ dependencies = [ "rustls-pki-types", ] +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + [[package]] name = "winapi-util" version = "0.1.11" @@ -2577,19 +2598,34 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + [[package]] name = "windows-link" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + [[package]] name = "windows-sys" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -2601,34 +2637,67 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-targets" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -2641,24 +2710,48 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" diff --git a/Cargo.toml b/Cargo.toml index 285947e..a875545 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -34,7 +34,7 @@ argon2 = "0.5.3" rand_core = { version = "0.6", features = ["getrandom"] } [target.aarch64-linux-android.dependencies] -jni = { version = "0.22.4", features = ["invocation", "default"], optional = true } +jni = { version = "0.21", features = ["invocation", "default"], optional = true } [target.aarch64-apple-ios.dependencies] objc2 = { version = "0.6.3", optional = true } @@ -47,6 +47,6 @@ cc = "1.2" [features] library = ["jni", "objc2", "objc2-foundation"] -#[lib] -#crate-type = ["cdylib"] -#required-features = ["library"] +[lib] +crate-type = ["cdylib"] +required-features = ["library"] diff --git a/src/android.rs b/src/android.rs index dd66f97..70b6ac5 100644 --- a/src/android.rs +++ b/src/android.rs @@ -1,8 +1,9 @@ -use jni::{Env, EnvUnowned}; -use jni::objects::{JClass, JString}; -use jni::sys::jstring; -use jni::errors::ThrowRuntimeExAndDefault; +use jni::JNIEnv; +use jni::objects::{JClass}; +use jni::sys::{jstring, jboolean}; use std::thread; +use std::sync::Once; +use jni::objects::JString; use crate::{run_server, stop_server}; use std::os::raw::c_char; @@ -26,52 +27,50 @@ macro_rules! log_to_logcat { }; } +static ANDROID_INIT: Once = Once::new(); + +// Install a panic hook once so Rust panics surface in logcat instead of being +// silently swallowed at the JNI boundary. +fn android_init() { + ANDROID_INIT.call_once(|| { + std::panic::set_hook(Box::new(|info| { + log_to_logcat!("ew", "PANIC: {}", info); + })); + }); +} + #[unsafe(no_mangle)] -pub extern "system" fn Java_one_ethanthesleepy_androidew_BackgroundService_startServer<'local>( - mut unowned_env: EnvUnowned<'local>, +extern "C" fn Java_one_ethanthesleepy_androidew_BackgroundService_startServer<'local>( + mut env: JNIEnv<'local>, _class: JClass<'local>, data_path: JString<'local>, - easter: bool, + easter: jboolean ) -> jstring { - crate::runtime::set_easter_mode(easter); + android_init(); + crate::runtime::set_easter_mode(easter != 0); - unowned_env - .with_env(|env: &mut Env<'local>| -> jni::errors::Result { - let data_path: String = data_path.to_string(); - crate::runtime::update_data_path(&data_path); + let data_path: String = env.get_string(&data_path).unwrap().into(); + crate::runtime::update_data_path(&data_path); - let output = JString::from_str(env, "Azunyannnn~")?; - - thread::spawn(|| { - run_server(true).unwrap(); - }); - log_to_logcat!("ew", "running"); - - Ok(output.into_raw()) - }) - .resolve::() + let output = env.new_string(String::from("Azunyannnn~")).unwrap(); + thread::spawn(|| { + run_server(true).unwrap(); + }); + log_to_logcat!("ew", "running"); + output.into_raw() } #[unsafe(no_mangle)] -pub extern "system" fn Java_one_ethanthesleepy_androidew_BackgroundService_stopServer<'local>( - mut unowned_env: EnvUnowned<'local>, - _class: JClass<'local>, -) -> jstring { +extern "C" fn Java_one_ethanthesleepy_androidew_BackgroundService_stopServer<'local>(env: JNIEnv<'local>, _class: JClass<'local>) -> jstring { + android_init(); stop_server(); - - unowned_env - .with_env(|env: &mut Env<'local>| -> jni::errors::Result { - let output = JString::from_str(env, "I like Yui!")?; - Ok(output.into_raw()) - }) - .resolve::() + let output = env.new_string(String::from("I like Yui!")).unwrap(); + output.into_raw() } + #[unsafe(no_mangle)] -pub extern "system" fn Java_one_ethanthesleepy_androidew_BackgroundService_setEasterMode<'local>( - _unowned_env: EnvUnowned<'local>, - _class: JClass<'local>, - easter: bool, -) { - crate::runtime::set_easter_mode(easter); +extern "C" fn Java_one_ethanthesleepy_androidew_BackgroundService_setEasterMode<'local>(_env: JNIEnv<'local>, _class: JClass<'local>, easter: jboolean) { + android_init(); + crate::runtime::set_easter_mode(easter != 0); }