2011-02-10 42 views
6

Estoy tratando de ejecutar un script de shell desde mi aplicación Android.¿Cómo podemos ejecutar un archivo de script de shell desde mi aplicación Android?

Primero trató de correr Shell script de Java y que funcione bien para todos los comandos como pwd, cd, netstat. moviendo el archivo, copiando el archivo.

De lo que he intentado desde una aplicación Android y yo estoy de salida para cd, pwd, netstat y por resúmenes de eco que se encuentran en la escritura, pero para mover y copiar el archivo no está trabajando.

¿Hay algún Permiso necesario para ejecutar estos comandos desde el archivo de script mientras estos comandos funcionan bien desde adb shell?

mi mirada código como este:

void execCommandLine() 
    { 
     //*********************** 
     try 
     { 
      Runtime rt = Runtime.getRuntime(); 
      Process proc = rt.exec("ls -all"); 

      proc = rt.exec("sh /data/shTest.sh"); 
      InputStream is = proc.getInputStream(); 
      InputStreamReader isr = new InputStreamReader(is); 
      BufferedReader br = new BufferedReader(isr); 
      String line; 

     while ((line = br.readLine()) != null) { 
     System.out.println(line); 
     } 
      } catch (Throwable t) 
      { 
      t.printStackTrace(); 
      } 

y mi archivo de comandos es la siguiente: Sólo

#!/bin/sh 
echo "Knowledge is Power" 
echo "I am a script" 
echo $PATH 
netstat 
pwd 
cd /data 
pwd 
cd /system/bin 
pwd 
    mv /data/local/hello.txt /data/ 
    cp /data/local/hello1.txt /data/ 
cd /data/local/tmp 
cd /system/bin 

los cp y mv comandos no están mostrando resultado esperado. Por favor, dame alguna orientación.

Lo primero que intento hacer es probarlo en Emulator. In/System/bin tiene mv commond y también he intentado con busybox pero no obtuve el resultado esperado. Para privilegios de root cómo proceder ... Da una idea para continuar.

+0

¿Por qué te fijar una nueva pregunta en lugar de editar el anterior? –

+0

@anshu ¿Encontró la solución a la pregunta anterior? En caso afirmativo, por favor dígame la solución. – Ramakrishna

+0

¿se puede ejecutar esto a través de 'adb shell'? – spatulamania

Respuesta

1

Algunos consejos sobre lo que podría estar pasando con usted. ¿Tiene un teléfono rooteado? ¿Tiene los comandos mv y cp en/system/bin? Finalmente, podría intentar usar busybox, si su teléfono lo tiene. Quizás primero deba solicitar privilegios de root para hacer esto ...

+0

Lo primero que intento hacer es probarlo en Emulator. In/System/bin tiene mv commond y también he intentado con busybox pero no obtuve el resultado esperado. Para privilegios de root cómo proceder ... Da una idea para continuar. – anshu

4

mv y cp ambos me dan problemas en el shell de Android. muchas otras personas usan cat x > y o similar con resultados decentes.

+0

Buena solución, +1. Si está interesado, le di una explicación de sus problemas. –

1

Sweeney ya le dio una solución, pero aquí hay una explicación.

Android no es GNU Linux, entonces el cp y mv vienen por defecto son bastante diferentes. En Android solo administran enlaces duros, por lo que, por ejemplo, si intenta mover archivos a través de particiones, hará que sus datos desaparezcan, ya que no mueve los datos de la partición a la partición, simplemente ajusta los enlaces duros. Utilizando busybox, o creando scripts cp y mv, cat file > otherfile y para mv a rm file es imprescindible si no puede cambiar los scripts, pero es mejor cambiar los scripts, ya que los convierte en sistemas portátiles que no tienen tus hacks.

0

La solución que uso es un enlace simbólico. Por ejemplo, si in/system/bin no están presentes comandos como cp, grep o mv, seguro están presentes en busybox. Por esta acabo de volver a montar/RW mediante sistema de comando (de emulador de terminal) y de crear enlaces simbólicos su mount -o rw,remount /system cd /system/bin ln -s busybox cp # cp or other command

Cuestiones relacionadas