Skip to content

🚀 Empower Your Android Native Apps: Seamlessly Dispatch Input Events to Custom Surfaces! Unlock the power of system-level touch and input handling for independently created Surfaces in Android.

License

Notifications You must be signed in to change notification settings

Bzi-Han/AndroidInputEventDispatcher

Repository files navigation

AndroidInputEventDispatcher

介绍

在 Android 使用上 API 对独立创建的 Surface 的窗口信息进行补全,使得其能够正常设置并接收由系统分发过来的输入(触摸)事件。

注意:理论上来说,此方案与 AndroidSurfaceImgui 一样都需要 shell 或以上的权限才可使用。

支持系统版本

Android 版本 支持情况 说明
5.0 - 10 ✅ 支持(Extension 模式) 需要通过 JNIEnv / JavaVM 进行扩展调用,依赖 Java 层接口。
11 - 15 ✅ 支持(纯 Native 模式) 无需 Java 层参与,直接使用 Native API。
16+ ⛔ 暂不支持 暂未适配 Android 16+ 的输入系统改动。

编译

  1. 确保在项目根目录打开命令行终端 。
  2. 执行 git submodule update --init
  3. 执行 cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=${NDK_PATH}build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-23 -DANDROID_ABI=${PLATFORM} -S . -B build -G Ninja,其中 ${NDK_PATH} 需要替换为你的NDK路径,${PLATFORM} 替换成你想要编译出的目标平台。
  4. 执行 cmake --build build --config Release
  5. 编译完成。

你也可以直接使用 android-build.bat 来进行批量编译,默认编译 armeabi-v7a arm64-v8a x86 x86_64 四个版本,可修改脚本中的 ANDROID_ABIS 变量来进行更改。

脚本有三个可选参数分别为:NDK路径、最低支持SDK版本、CMake程序路径,不设置则脚本自动检测 NDK_PATH 与 CMake 工具链,如果都没有则使用脚本默认内置路径。

CMake编译选项

  • ANDROID_INPUT_EVENT_DISPATCHER_BUILD_STATIC:是否编译主库,默认为 ON
  • ANDROID_INPUT_EVENT_DISPATCHER_BUILD_TEST:是否编译测试程序与测试库,默认为 ON
  • ANDROID_INPUT_EVENT_DISPATCHER_ENABLE_SUPPORTED_EXTENSION:是否开启 extension 支持(5-10需要),默认为 ON

使用

例子请看:src/test/main.cc

ainputdispatcher.webm
ainputdispatcher2.webm

About

🚀 Empower Your Android Native Apps: Seamlessly Dispatch Input Events to Custom Surfaces! Unlock the power of system-level touch and input handling for independently created Surfaces in Android.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published