Запуск файла сценария оболочки на встроенном устройстве Android с помощью функции «Система» в Android NDK - PullRequest
3 голосов
/ 28 марта 2012

Все

Здесь я хочу запустить файл .sh через системный вызов в Android NDK.

Я могу запустить команду cp,rm через системный вызов.но команда sh не работает через системный вызов.

Я также установил busy-box на android. Я использую приведенный ниже код. Я установил все разрешения на 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.

Здесь я получаю 0 в system("sh ./test.sh");, но не запустил скрипт test.sh.

не могу получить вывод "Hi" на консоли.

test.sh содержит

#!/system/bin/
echo "Hi"

Если я выполняю прямую команду по приглашению, то она работает нормально, и на консоли выводится "Hi".

Пожалуйста, помогитемне разобраться в этом вопросе.

Спасибо

Ответы [ 2 ]

2 голосов
/ 31 марта 2012

Где вы ожидаете увидеть «эхо»?По умолчанию Android отправляет стандартный вывод в / dev / null.

Согласно документации вы можете перенаправить stdout и stderr в журнал (чтобы он отображался в logcat) с помощью следующих команд:

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

Теперь выможет видеть ваше эхо в adb logcat.

0 голосов
/ 28 марта 2012

Возможно, вы захотите попробовать sh -c /full/path/to/test.sh

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...