c-使用Android NDK中的系统功能在Android嵌入式设备上运行Shell脚本文件



所有

在这里,我想通过android NDK中的系统调用运行.sh文件。

我可以通过系统调用运行cp,rm命令。但是sh命令不能通过系统调用工作。

我还在安卓系统上安装了忙盒。我正在使用以下代码。我设置了test.sh的所有权限。

代码:

#include <stdlib.h>
#include <stdio.h>
#include <android/log.h>
#include <jni.h>
#define LOG_TAG "Demo"
#define LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)

void Java_com_ndkdemo_NDKdemoActivity_systemcall(JNIEnv * env, jobject obj) {
    int result;
    result = system("cp /mnt/sdcard/test /Download");
    LOGD("result is cp %d", result);
    result = system("sh ./test.sh");
    LOGD("result of test.sh is %d", result);
}

输出:

 result is cp 0.
 result of test.sh is 0.

这里我在system("sh ./test.sh");中得到了0,但还没有启动test.sh脚本。

无法在控制台上获得输出"Hi"

test.sh包含

#!/system/bin/
echo "Hi"

如果我在提示符下执行直接命令,那么它的工作状态良好,并且控制台上有给定的输出"Hi"

请帮我解决这个问题。

感谢

您希望在哪里看到"echo"?默认情况下,android将stdout发送到/dev/null。

根据文档,您可以使用以下命令将stdout和stderr重定向到日志(因此它将显示在logcat中):

$ adb shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell start

现在您可以在adb logcat中看到您的回声。

您可能想要尝试sh -c /full/path/to/test.sh

最新更新