我需要在Android Studio中构建NDK。但它返回一个错误

我需要在Android Studio中构建NDK。但它返回一个错误,android,c++,c,android-ndk,Android,C++,C,Android Ndk,当我尝试构建时,我会遇到几个错误: Build command failed. Error while executing process E:\sdk\ndk-bundle\ndk-build.cmd with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=D:\TASK\workspace_3\android-event-injector-master\AndroidEventInjector\src\main\jni\A

当我尝试构建时,我会遇到几个错误:

    Build command failed.
    Error while executing process E:\sdk\ndk-bundle\ndk-build.cmd with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=D:\TASK\workspace_3\android-event-injector-master\AndroidEventInjector\src\main\jni\Android.mk APP_ABI=x86_64 NDK_ALL_ABIS=x86_64 NDK_DEBUG=1 APP_PLATFORM=android-21 NDK_OUT=D:/TASK/workspace_3/android-event-injector-master/AndroidEventInjector/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=D:\TASK\workspace_3\android-event-injector-master\AndroidEventInjector\build\intermediates\ndkBuild\debug\lib D:/TASK/workspace_3/android-event-injector-master/AndroidEventInjector/build/intermediates/ndkBuild/debug/obj/local/x86_64/libEventInjector.so}
    [x86_64] Compile : EventInjector <= EventInjector.c
    D:/TASK/workspace_3/android-event-injector-master/AndroidEventInjector/src/main/jni/EventInjector.c:83:7:
        error: format string is not a string literal (potentially insecure) [-Werror,-Wformat-security]

            LOGD(szBuffer);
            ^~~~~~~~

    D:/TASK/workspace_3/android-event-injector-master/AndroidEventInjector/src/main/jni/EventInjector.c:49:65:
        note: expanded from macro 'LOGD'

            #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , TAG, VA_ARGS)
            ^~~~~~~~~~~

    D:/TASK/workspace_3/android-event-injector-master/AndroidEventInjector/src/main/jni/EventInjector.c:83:7:
        note: treat the string as an argument to avoid this

            LOGD(szBuffer);
            ^
            "%s",

    D:/TASK/workspace_3/android-event-injector-master/AndroidEventInjector/src/main/jni/EventInjector.c:49:65:
        note: expanded from macro 'LOGD'

            #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , TAG, VA_ARGS)
            ^

    D:/TASK/workspace_3/android-event-injector-master/AndroidEventInjector/src/main/jni/EventInjector.c:242:28:
        error: non-void function 'Java_net_pocketmagic_android_eventinjector_Events_intSendEvent' should return a value [-Wreturn-type]

            if (fd <= fileno(stderr)) return;
            ^

    2 errors generated.
    make: *** [D:/TASK/workspace_3/android-event-injector-master/AndroidEventInjector/build/intermediates/ndkBuild/debug/obj/local/x86_64/objs-debug/EventInjector/EventInjector.o] Error 1
Build命令失败。
使用参数执行进程E:\sdk\ndk bundle\ndk-build.cmd时出错{NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=D:\TASK\workspace_3\android event injector master\androideventinector\src\main\jni\android.mk APP_ABI=x86_64 NDK_ALL_ABIS=x86_64 NDK_DEBUG=1 APP_PLATFORM=android-21 NDK_OUT=D:/TASK/workspace_3/android event injector master/android event injector/BUILD/intermediates/ndkBuild/ndkBuild/DEBUG/obj NDK-libu-OUT=D:\TASK\nspace\u 3\android事件注入器master\androideventinector\build\intermediates\ndkBuild\debug\lib D:/TASK/workspace\u 3/android事件注入器master/androideventinector/build/intermediates/ndkBuild/debug/obj/local/x86\u 64/libEventInjector.so}

[x86_64]Compile:EventInjector当最初的Github上载程序构建此错误时,这两个错误似乎都被视为警告(并被抑制或忽略)

由于不同的编译器设置或默认设置,它们在构建时显示为错误(IMO应该如此)

在短期内,您可以更改编译器标志以忽略这些标记,但是如果您确实修复了它们(并向Github提交了一个pull请求),或者至少通知维护人员这样做,那就更好了

  • EventInjector.c(83:7):错误:格式字符串不是字符串文字(可能不安全)[-Werror,-Wformat security]

    LOGD(szBuffer);
    ^~~~~~~~
    
    if (fd <= fileno(stderr)) return;
    ^
    
    看起来此宏的使用方式与printf类似,例如:

    LOGD("The %s is %d years old", "dog", 7);
    
    因此,第一个参数是专门解释的;一个具有特殊格式序列的字符串(例如“%s”)

    此警告/错误提醒您在传递可能是用户数据的内容时存在危险,例如
    LOGD(user\u input)
    。如果
    user\u input
    不包含任何特殊格式字符(“%”),则您可能没有问题

    但是如果它这样做了,那么日志函数将期望后续出现额外的参数(您没有提供),因此它将从堆栈中获取不应该获取的内容。这是一个安全漏洞,也是一个潜在的崩溃

    解决方案是添加文字格式字符串:

    LOGD("%s", szBuffer);
    
    …这样一来,
    szBuffer
    可以包含任何内容,而且不会把事情搞砸

  • EventInjector.c(242:28):错误:非无效函数“Java\u net\u pocketmagic\u android\u EventInjector\u Events\u intSendEvent”应返回值[-Wreturn type]

    LOGD(szBuffer);
    ^~~~~~~~
    
    if (fd <= fileno(stderr)) return;
    ^
    
错误输出中的其余几行只是关于第一个错误的附加说明。这两个修复程序应该可以帮助您继续