在 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