2012-04-23 24 views
7

Bazı Android cihazlarda, ADB kabuğunda, yalnızca echo, cd, ls'u çalıştırabilirim. Ben çalıştırdığınızda:Bir Android cihazında Linux komutlarını nasıl çalıştırabilirim?

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

Veya komut cp, bu döndürür:

sh: tar: not found 

Neden bu komutları çalıştıramıyorum? Bazı cihazlar bu komutları destekler. Son hedefim bir dosyayı /data/data klasöründen SD karta kopyalamaktır. Ben suvar ve aşağıdaki kodu var: is.ready() yılında

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(); 
} 

Her zaman durur ve ben process.waitfor() olarak değiştirdim zaman o da durdu. Niye ya?

+2

Android kabuklarının standart Linux işletim sisteminden çok daha kısıtlı olduğunu anlıyor musunuz? – JoxTraex

cevap

10

Linux Android'de komutları çalıştırabilirsiniz. Ancak genellikle önceden yüklenmiş çok az sayıda var. Daha fazla komut eklemek isterseniz, cihazınıza root isteyebilir ve üzerine busybox'u yükleyebilirsiniz.

Bu, bir uygulama içinde verimli bir kullanım için değil, ancak cihazınızla çalışmanıza yardımcı olabilir.

+0

Teşekkürler, sorunun nerede olduğunu biliyorum. Ama benim sorunum hala çözülmedi. –

+0

Peki, dosyaları aramak için Android'de 'locate' komutunu nasıl çalıştırabilirim? Bu BusyBox'ta bir uygulama değil gibi görünüyor. –

9

olarak bildiğim kadarıyla, kabuk komutları çalıştırmak için tek yoldur:

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

Komut sonucuna nerede erişebilirim? – user3806649

+0

@ user3933607 Bakın: http://stackoverflow.com/q/3350283/878126 –

1

Sisteminiz için ikili dosyalarınız varsa, sisteminizde herhangi bir şeyi çalıştırabilirsiniz.

tar için ikili dosyaları bulmanız gerektiğini anlamanız gerektiğini varsayarak.

burada bak http://forum.xda-developers.com/showthread.php?t=872438

ve muhtemelen başka yerlerde .. Igor Ganapolsky cevap olarak

-2

Yerini bulmak için ayarlanmış bir veritabanı gerekir.

Muhtemelen 'bulmak' ihtiyaçlarınız için yeterli olacaktır.

exmample:

bulmak -name * .apk

-1

yükleyin busybox, daha sonra aşağıdaki biçimde komutu yazın:

busybox [linux komut]

Tüm kullanamazsınız Android, meşgul linux olmayan komutlar, çünkü standart bir linux işletim sisteminde bulunan tüm ikili dosyalar mevcut değil.

FYI, bir ikili derlenmiş kod içeren bir dosyadır. Varsayılan ikili dosyaların çoğu/system/bin/sh dizininde depolanır. 'Cp' ls '' get 'gibi tüm bu komutlar aslında ikilidir. Onları aracılığıyla görebilirsiniz:

ls -a/sistem/bin/sh

Umut bu yardımcı olur.

İlgili konular