gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:42:28 25 4
gpt4 key购买 nike

当我尝试构建 this project 时,我遇到了几个错误:

    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

最佳答案

当原始 Github 上传者构建这个时,这两个错误似乎都被视为警告(并被抑制或忽略)。

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

在短期内,您可以更改您的编译器标志以忽略这些,但如果您真的修复它们(并向 Github 提交拉取请求),或者至少通知维护者这样做会更好。

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

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

    看起来这个宏像printf一样使用,例如:

    LOGD("The %s is %d years old", "dog", 7);

    所以第一个参数被特殊解释;具有特殊格式序列的字符串(例如“%s”)。

    此警告/错误提醒您传递可能是用户数据的危险,例如登录(用户输入)。如果 user_input 不包含任何特殊格式字符(“%”),那么您可能没问题。

    但如果它确实,那么日志记录函数将期望后面有额外的参数(你没有提供),所以它会从堆栈中获取它不应该获取的东西。这是一个安全漏洞,也是一个潜在的崩溃

    解决办法是添加文字格式字符串:

    LOGD("%s", szBuffer);

    ...这样 szBuffer 就可以包含任何东西,而且不会把事情搞砸。

  • EventInjector.c(242:28):错误:非空函数“Java_net_pocketmagic_android_eventinjector_Events_intSendEvent”应该返回一个值 [-Wreturn-type]

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

    Java_net_pocketmagic_android_eventinjector_Events_intSendEvent 函数被声明为返回一个 jint,但是上面的 return 语句没有返回任何东西。调用者将要得到东西,那么编译器应该做什么?

    这通常是由于开发人员的疏忽造成的,因此它被视为错误,尽管它可以被视为警告,编译器简单地返回 ' jint'类型。

    解决办法是在return后加一个值。如果您禁用此错误/警告,我相信编译器将生成默认返回 (jint)0 的代码。

    相反,我会继续修复它:

    if (fd <= fileno(stderr)) return (jint)0;

错误输出中的其余行只是关于第一个错误的附加注释。这两个修复应该让你继续。

关于android - 我需要在 Android Studio 中构建 NDK。但它返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49932625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com