This will be a library that can be reused to implement an Android view in Rust. Things that will distinguish it from android-activity
:
- No C++ code.
- Meant to be usable for both pure-Rust Android applications and embedding Rust widgets in existing applications.
- Event handlers and other view callbacks run directly on the UI thread; there is no sending events to a separate Rust event loop thread.
- This crate intends to stick as close as possible to the Android framework. This will be especially important for text input support.
So far, glue code has been written for implementing several Android framework methods (on both View
and SurfaceHolder.Callback
) in Rust, but the plumbing for InputConnection
still needs to be done. The reusable Java code also isn't yet cleanly separated from the demo application.
export ANDROID_NDK_HOME="path/to/ndk"
export ANDROID_HOME="path/to/sdk"
rustup target add aarch64-linux-android
cargo install cargo-ndk
cargo ndk -t arm64-v8a -o app/src/main/jniLibs/ build -p android-view-demo
./gradlew build
./gradlew installDebug
adb shell am start -n org.linebender.android.viewdemo/.DemoActivity
# To view logs:
adb shell run-as org.linebender.android.viewdemo logcat -v color
- Do we need to be able to handle the view being reattached to a window after it has been detached? If not, then
onDetachedFromWindow
is the logical place to sever the connection between Java and native.