在 Android 使用上 API 对独立创建的 Surface 的窗口信息进行补全,使得其能够正常设置并接收由系统分发过来的输入(触摸)事件。
注意:理论上来说,此方案与 AndroidSurfaceImgui 一样都需要 shell 或以上的权限才可使用。
| Android 版本 | 支持情况 | 说明 | 
|---|---|---|
| 5.0 - 10 | ✅ 支持(Extension 模式) | 需要通过 JNIEnv/JavaVM进行扩展调用,依赖 Java 层接口。 | 
| 11 - 15 | ✅ 支持(纯 Native 模式) | 无需 Java 层参与,直接使用 Native API。 | 
| 16+ | ⛔ 暂不支持 | 暂未适配 Android 16+ 的输入系统改动。 | 
- 确保在项目根目录打开命令行终端 。
- 执行 git submodule update --init。
- 执行 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}替换成你想要编译出的目标平台。
- 执行 cmake --build build --config Release。
- 编译完成。
你也可以直接使用 android-build.bat 来进行批量编译,默认编译 armeabi-v7a arm64-v8a x86 x86_64 四个版本,可修改脚本中的 ANDROID_ABIS 变量来进行更改。
脚本有三个可选参数分别为:NDK路径、最低支持SDK版本、CMake程序路径,不设置则脚本自动检测 NDK_PATH 与 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