首页 > 解决方案 > 在启用 VNDK 的情况下构建供应商模块时使用 NDK 标头

问题描述

我有一个使用 AOSP (android 9.0.0_r35) 构建的本机供应商模块。该模块使用android/input.h标题。请注意,此标头包含在 android NDK中。

启用VNDK时,构建模块失败并fatal error: 'android/input.h' file not found出现错误。

这是由 android 构建系统(请参阅compiler.go)在CommonGlobalIncludes启用 VNDK 时未导出,因此 frameworks/native/include(包含 input.h)不在包含列表中。

我尝试将 libandroid 添加到 LOCAL_SHARED_LIBRARIES 但没有成功。提到标头的android 文档并不指 NDK 包含。这个文件应该保持稳定,所以我认为从供应商模块中使用它是安全的。

是否包含一个模块(LOCAL_SHARED_LIBRARIES 或 LOCAL_HEADER_LIBRARIES)以允许使用 NDK 标头?否则,添加$(ANDROID_BUILD_TOP)/out/soong/ndk/sysroot/usr/include/到包含路径是否安全?

测试代码:Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE:= testIncludeInput_vendor
LOCAL_PROPRIETARY_MODULE := true
LOCAL_SRC_FILES := test.cpp
LOCAL_SHARED_LIBRARIES := libandroid 
include $(BUILD_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE:= testIncludeInput_system
LOCAL_SRC_FILES:= test.cpp
LOCAL_SHARED_LIBRARIES := libandroid 
include $(BUILD_STATIC_LIBRARY)

测试.cpp:

#include <android/input.h>

标签: androidandroid-sourceandroid-build

解决方案


推荐阅读