【问题标题】:Run Shell Script file On Android Embedded Device using System function in Android NDK使用 Android NDK 中的系统函数在 Android 嵌入式设备上运行 Shell 脚本文件
【发布时间】:2012-03-28 14:46:50
【问题描述】:

全部

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

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

我还在android上安装了busy-box。我正在使用下面的代码。我在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"。

请帮我解决这个问题。

谢谢

【问题讨论】:

  • 另外,仅供参考:您的第一行应指向您要运行的脚本,因此应设置为#!/system/bin/sh。

标签: android c android-ndk


【解决方案1】:

您希望在哪里看到“回声”?默认情况下,android 将标准输出发送到 /dev/null。

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

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

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

【讨论】:

  • 感谢您的回复,但是没有这个我无法运行 shell 脚本?
  • 不做stdio重定向也可以运行shell脚本,但是回显会丢失。
【解决方案2】:

你可能想试试sh -c /full/path/to/test.sh

【讨论】:

  • 好的。请注意,使用echo 可能不是测试它的最佳方法,请尝试使用touch 或创建文件的东西。从 NDK 开始的 shell 的标准输出重定向到哪里并不完全清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 2014-01-24
  • 2012-05-21
相关资源
最近更新 更多