我需要在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;
^
错误输出中的其余几行只是关于第一个错误的附加说明。这两个修复程序应该可以帮助您继续