2012-03-28 2 views
3

AlleRun Shell Script-Datei auf Android Embedded-Gerät mit Systemfunktion in Android NDK

Hier will ich .Sh Datei per Systemaufruf in Android NDK laufen.

Ich kann cp,rm Befehl über Systemaufruf ausführen. aber SH-Befehl funktioniert nicht über Systemaufruf.

Ich habe auch Busy-Box auf Android installiert.Ich benutze unten Code.Ich setze alle Erlaubnis auf test.sh.

Code:

#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); 

} 

Ausgang:

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

Hier bin ich immer 0 in system("sh ./test.sh"); aber das test.sh Skript nicht gestartet.

kann Ausgabe "Hi" auf Konsole nicht ausgegeben werden.

test.sh enthält

#!/system/bin/ 
echo "Hi" 

Wenn i auf schnellen Direktbefehl am Ausführung als seine Arbeits fein und seine gegebenen Ausgabe "Hi" auf der Konsole.

Bitte helfen Sie mir, dieses Problem zu lösen.

Dank

+0

auch, FYI: Ihre erste Zeile sollte auf das Skript zeigen, das Sie ausführen möchten, sollte also auf '#!/System/bin/sh' gesetzt werden. – Phil

Antwort

2

Wo wollen versuchen Sie es dem "Echo", um zu sehen erwartet? Standardmäßig sendet Android stdout an/dev/null.

Nach dem documentation Sie können stdout und stderr in das Protokoll umleiten (so wird es in logcat angezeigt) mit den folgenden Befehlen:

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

Nun können Sie Ihr Echo in adb logcat sehen.

+0

Danke für Ihre Antwort, aber ohne dies kann ich Shell-Skript ausführen? – user1089679

+0

Sie können das Shell-Skript ausführen, ohne die Umleitung von stdio auszuführen, aber das Echo ist verloren. – richq

0

Sie könnten sh -c /full/path/to/test.sh

+0

Ich habe das schon probiert – user1089679

+1

OK. Beachten Sie, dass die Verwendung von "echo" möglicherweise nicht der beste Weg ist, dies zu testen, versuchen Sie es mit 'touch' oder etwas, das eine Datei erstellt. Es ist nicht genau ersichtlich, wo die Anzahl der von NDK startenden Shells umgeleitet wird. –