2012-04-23 50 views
7

En algunos dispositivos Android, en el shell ADB, solo puedo ejecutar echo, cd, ls. Cuando corro:¿Cómo puedo ejecutar comandos de Linux en un dispositivo Android?

tar -cvf //mnt/sdcard/BackUp1669/apk/test.tar /mnt/sdcard/test.apk 

o el comando cp, devuelve:

sh: tar: not found 

¿Por qué no puedo ejecutar estos comandos? Algunos dispositivos admiten estos comandos. Mi objetivo final es copiar un archivo de la carpeta /data/data a la tarjeta SD. Tengo Do y tengo el siguiente código:

int timeout = 1000; 
String command = "tar -cvf /" + Environment.getExternalStorageDirectory() + "/cp/" 
     + packageName + ".tar" + " " + path; 
DataOutputStream os = new DataOutputStream(process.getOutputStream()); 
BufferedReader is = new BufferedReader(new InputStreamReader(new DataInputStream(
     process.getInputStream())), 64); 

String inLine; 
try { 
    StringBuilder sbCommand = new StringBuilder(); 
    sbCommand.append(command).append(" "); 
    sbCommand.append("\n"); 
    os.writeBytes(command.toString()); 
    if (is != null) { 
     for (int i = 0; i < timeout; i++) { 
      if (is.ready()) 
       break; 
      try { 
       Thread.sleep(5); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
     if (is.ready()) { 
      inLine = is.readLine(); 
     } else { 
     } 
    } 

} catch (IOException e) { 
    e.printStackTrace(); 
} 

Se detiene siempre en is.ready(), y cuando lo cambié a process.waitfor() también se detuvo. ¿Por qué?

+2

¿Te das cuenta de que el shell de Android es mucho más restringido que un sistema operativo Linux estándar, verdad? – JoxTraex

Respuesta

10

Usted puede ejecutar comandos de Linux en Android. Pero generalmente hay muy pocos preinstalados. Si desea agregar más comandos, puede querer root su dispositivo e instalar busybox en él.

Esto no es para uso productivo dentro de una aplicación pero puede ayudarlo a trabajar con su dispositivo.

+0

Gracias, sé dónde está el problema. Pero mi problema aún no se ha resuelto. –

+0

Entonces, ¿cómo puedo ejecutar el comando 'locate' en Android para buscar archivos? Parece que esto no es un applet en BusyBox. –

9

Por lo que yo sé, la única manera de ejecutar comandos shell es:

Process proc = Runtime.getRuntime().exec("your command"); 
+0

¿dónde puedo acceder al resultado del comando? – user3806649

+0

@ user3933607 Ver aquí: http://stackoverflow.com/q/3350283/878126 –

-2

En respuesta a Igor Ganapolsky, que tendrían que tener una base de datos creada para localizar.

Probablemente 'encontrar' sería adecuado para sus necesidades.

exmample:

hallazgo -name * .apk

-1

Instalar busybox, a continuación, escriba el comando en el siguiente formato:

busybox [comando linux]

no puede utilizar todo el comandos de linux sin busybox, porque Android no tiene todos los binarios disponibles en un sistema operativo estándar de Linux.

FYI, un archivo binario es solo un archivo que contiene código compilado. Muchos de los binarios predeterminados se almacenan en el directorio/system/bin/sh. Todos estos comandos como 'cp' 'ls' 'get', etc., en realidad son binarios. Se puede ver a través de:

ls -a/system/bin/sh

Espero que esto ayude.

Cuestiones relacionadas