2012-04-23 2 views
7

일부 Android 기기의 경우 ADB 쉘에서 echo, cd, ls 만 실행할 수 있습니다. 내가 실행하면 :Android 기기에서 Linux 명령을 실행하려면 어떻게해야합니까?

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

또는 명령 cp, 그것은 반환

sh: tar: not found 

이유는이 명령을 실행할 수 없습니다? 일부 장치는이 명령을 지원합니다. 마지막 목표는 /data/data 폴더의 파일을 SD 카드로 복사하는 것입니다. 나는 스와있고 난 다음 코드를 가지고 : is.ready()

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

그것은 항상 정지를, 나는 process.waitfor()로 변경하는 경우 또한 중단되었습니다. 왜?

+2

당신은 안드로이드 셸이 표준 리눅스 OS보다 훨씬 제한적이라는 것을 알고 있습니까? – JoxTraex

답변

10

당신은 리눅스 안드로이드에 명령을 실행할 수 있습니다. 그러나 일반적으로 사전 설치 된 것은 거의 없습니다. 더 많은 명령을 추가하려면 root 장치에 설치하고 busybox을 설치하십시오.

이 정보는 응용 프로그램 내에서 생산적으로 사용하는 것이 아니라 장치 사용에 도움이 될 수 있습니다.

+0

고마워, 어디서 문제인지 알 수 있습니다. 하지만 내 문제는 여전히 해결되지 않았습니다. –

+0

그래서 안드로이드에서 파일 찾기를 위해'locate' 명령을 어떻게 실행할 수 있습니까? 이것은 BusyBox에서 애플릿이 아닌 것 같습니다. –

9

는 지금까지 내가 아는 한, 쉘 명령을 실행 할 수있는 유일한 방법은 다음과 같습니다

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

어디에서 명령 결과에 액세스 할 수 있습니까? – user3806649

+0

@ user3933607 여기를 참조하십시오 : http://stackoverflow.com/q/3350283/878126 –

1

시스템에 대한 바이너리가있는 경우 시스템에서 아무 것도 실행할 수 있습니다.

tar에 대한 바이너리를 찾아야한다는 것을 이해해야한다고 가정하면.

여기 봐 http://forum.xda-developers.com/showthread.php?t=872438

그리고 아마도 다른 장소에 .. 이고르 Ganapolsky에 대한 응답에서

-2

, 당신은 위치에 설정 데이터베이스를 가지고해야합니다.

아마 '찾기'가 귀하의 필요에 적합 할 것입니다.

exmample :

찾기 -name * .apk 파일

-1

설치 비지 박스는 다음 형식으로 명령을 입력

비지 박스 [리눅스 명령]

당신은 모두를 사용할 수 없습니다 linux는 busybox없이 명령을 내린다. 안드로이드는 표준 리눅스 운영체제에서 사용 가능한 모든 바이너리를 가지고 있지 않기 때문이다.

참고로 바이너리는 컴파일 된 코드가 포함 된 파일 일뿐입니다. 기본 바이너리는/system/bin/sh 디렉토리에 많이 있습니다. 'cp' 'ls' 'get'등의 명령은 모두 실제로 바이너리입니다. 당신이 그들을 통해 볼 수 있습니다

LS를 -a/시스템/빈/SH

희망이 도움이됩니다.

관련 문제