2013-07-14 8 views
0

내 코드에서 내 안드로이드 화면의 스냅 샷을 캡처하려고합니다. 그리고 나는 같은 쉘 스크립트를 사용하고있다.스크립트는 adb에서는 제대로 작동하지만 Android 코드에서는 작동하지 않습니다.

proc = runtime.exec("su"); 
    OutputStream os = proc.getOutputStream(); 
    os.write("copy".getBytes("ASCII")); 
    os.flush(); 
    System.out.print("Finished"); 

에뮬레이터에는 수퍼 유저가 있습니다. 즉, su 파일은/system/xbin/위치에서 사용할 수 있습니다. 사용 나는 아시아 개발 은행 (명령 프롬프트)에서이 파일을 컴파일 한

/system/bin/screencap -p /data/data/com.example.code/files/Hari123.png 

: 여기, 파일 복사 컨텐츠 다음이이 일을 후에, 나는이 같은 명령 프롬프트에서 명령을 실행

adb shell chmod 6755 /system/bin/copy 

:

adb shell exec copy 

이 모든 것이 정상적으로 작동합니다. 그러나, (처음에 언급) 안드로이드 코드도 또한 다음과 같은 코드를 갖는

proc = runtime.exec("su"); 

는 "1"의 proc.exitvalue()를 제공한다. 나는 loooooon 시간 동안 이것을 고치려고 노력했다. 나는 충분한 검색을했으나 아무 쓸모가 없었다.

에뮬레이터에서 문제가 될 수 있습니까? 아니면, "copy"파일을 네이티브 실행 파일로 만들어야합니까? 그렇다면 어떻게 말해주십시오.

답변

0

여러 번 설명했습니다. su 바이너리를 사용할 수있는 경우에도 - Google은 타사 Java 응용 프로그램에서 액세스 할 수 있기를 원하지 않습니다. Google의 디자인에 의해서만 shell 사용자는 권한을 확대 할 수 있습니다. Java 코드에서 su을 사용하려면 사용자 ID 확인없이 자신의 su 바이너리를 컴파일해야합니다.

+0

실제로 쉘 사용자는 대개 su를 사용할 수 있다고 생각하지 않지만 최근 변경된 사항이 없으면 에뮬레이터에서 adb 셸이 이미 쉘 사용자가 아닌 루트 사용자로 실행됩니다. 여하튼, 해킹 된 것보다는 오리지널 'su'바이너리 일 가능성이있는 단서를 놓쳤다. 그런 경우라면 해답을 얻을 수있다. –

+0

어떤 경우에 적어도 코드가 장치에서 제대로 작동해야합니까? 스크립트 파일이 장치 sdcard에 직접 복사 할만큼 충분히 괜찮습니까? 아니면 바이너리 실행 가능 파일로 만들어야합니까? –

+0

이 답변의 요점은 스크립트를 실행하지 않는 앱 버전에서도 실패보고에 일관성이 있다는 잘못된 'su'를 제안하는 것입니다. –

관련 문제