使用NDK构建项目失败

Failure to build a project using NDK

本文关键字:失败 项目 构建 NDK 使用      更新时间:2023-10-16

这是我第一次尝试使用NDK,我一直在构建这个项目。我正在尝试使用Android的屏幕截图记录程序中使用的库从我的屏幕上读取数据。我知道我需要使用LibGUI,我已经从我的手机拉。然而,每当我编译时,我都会得到以下错误消息:

C:/Users/Kevin/Desktop/ScreenCapture//jni/main.cpp:2:34: fatal error: gui/ISurfaceComposer.h: No such file or directory

这是奇怪的,考虑到我有libgui。所以包括在内。

我的主文件是什么样子的:

#include <stdio.h>
#include <gui/ISurfaceComposer.h>
int main() {
    printf("Started!");
    return 0;
}

我的Android。Mk看起来像:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libgui-prebuilt
LOCAL_SRC_FILES := libgui.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE    := screencapture
LOCAL_SRC_FILES := main.cpp
LOCAL_SHARED_LIBRARIES := libgui-prebuilt
include $(BUILD_EXECUTABLE)

我有主文件和libgui。在同一个文件夹

main.cpp:2:34:致命错误:gui/ISurfaceComposer.h: No such file or directory

你的错误信息表明编译器无法找到头文件,但你尝试的解决方案是从手机提供一个共享对象(so)

库可能在链接时提供帮助,但在链接之前必须成功编译,要做到这一点,您将不得不获得丢失的头文件(可能来自AOSP源代码,作为源代码,它将无法在手机上找到),或者通过从收集的线索推断其内容来重新创建它。不幸的是,通常不可能只从AOSP中取出一个内部标头,因为它可能依赖于许多其他标头。

如果内部组件之间的私有接口在Android版本之间发生变化,那么针对私有系统内部的链接也会带来程序崩溃的风险。

(通常我也会提到,你不太可能能够记录一个屏幕与NDK在它的正常使用,使共享库链接到一个应用程序进程,但你的Android。mk似乎表明你正在构建一个可执行文件- 可能工作,如果你能成功地构建它,你运行它作为一个用户有足够的权限,如adb的shell userid或使用根hack)

为模块截图添加一行:

LOCAL_C_INCLUDES := $(LOCAL_PATH)/

如果你没有gui文件夹,你需要复制&粘贴includes headers *.h到文件夹jni/gui。对于ndk总是有这样的要求…


或第二种情况-使用此源的其他位置:

LOCAL_LDLIBS := -L/full_path_to_source_gui/gui/