You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法使用Android NDK中AMotionEvent_getActionButton函数的问题及解决

问题原因

你遇到的错误核心在于:NDK编译时默认以minSdkVersion对应的API级别作为编译基准。你的minSdkVersion设为14,远低于AMotionEvent_getActionButton要求的API 33。即便compileSdk和targetSdkVersion都设为33,NDK为保证低版本设备的兼容性,会限制代码只能调用minSdk及以下版本存在的API,因此该函数会被标记为不可用。

修复方案

方案1:指定NDK编译的最小API级别(仅适用于无需兼容低版本的场景)

在build.gradle的externalNativeBuild配置中,添加ANDROID_PLATFORM参数强制使用API 33编译:

defaultConfig {
    // 保留原有其他配置
    externalNativeBuild {
        cmake {
            arguments '-DANDROID_STL=c++_static', '-DANDROID_PLATFORM=android-33'
        }
    }
}

注意:此设置会让APP只能在API 33及以上设备运行,若需兼容低版本设备请使用方案2。

方案2:添加版本兼容判断(推荐,保留低版本兼容)

在C代码中先判断当前设备的API级别,仅在API 33及以上时调用目标函数,低版本使用替代逻辑:

#include <android/api-level.h>

// ... 其他代码

int32_t buttonPress = 0;
if (__ANDROID_API__ >= 33) {
    buttonPress = AMotionEvent_getActionButton(event);
} else {
    // 低版本设备的替代逻辑:从AMotionEvent_getAction中解析按钮信息
    int32_t action = AMotionEvent_getAction(event);
    buttonPress = action & AMOTION_EVENT_ACTION_BUTTON_MASK;
}

若CMake未自动传递API级别宏,可在CMakeLists.txt中添加:

add_definitions(-D__ANDROID_API__=${ANDROID_MIN_SDK_VERSION})

另外,你的NDK版本25.1.8937393完全支持API 33,无需更换NDK。

内容的提问来源于stack exchange,提问作者user18514618

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:50:14