나를 용서해주세요, 나는 핵심 리눅스 프로그래머가 아닙니다. 이것은 내가 처음 리눅스 코딩을 한 것이므로 나와 함께 맨 처음이다.안드로이드 애플 리케이션에서 쉘 스크립트 실행
그래서이 주제에 대한 수많은 게시물을 읽었으며 코드에 어떤 문제가 있는지 파악하는 데 어려움이 있습니다. 기본적으로 프로필 앱을 만들려고합니다. 장치가 뿌리이며 BusyBox를 포함합니다. 로그인 한 사용자에 따라/data 및/cache 파티션을 스왑 아웃하는 리눅스 스크립트를 작성했습니다.
ADB에서이 스크립트를 실행할 때 완벽하게 작동합니다. 나는 그것을 애플 리케이션에서 구현하는 것이 매우 쉽다는 것을 알았다.
# SP 로그인 사용자 이름 암호
안드로이드는 새 프로필로 다시 초기화하고 모든이 좋다. 이것은 내가 안드로이드에있는 것입니다 :
Log.v("Profiles", "sp login " + user + " " + password);
Process process = Runtime.getRuntime().exec("sp login " + user + " " + password);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
int read;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
process.waitFor();
Log.v("Profiles", output.toString());
그 기록 만 밖으로는 실제 스크립트 자체에 내 "에코을"입니다. 그 스크립트에서 수행 된 명령의 결과를 보지 못합니다. 예를 들어, ADB에서 실행될 때, 모든 마운트 명령과 내가하고있는 여러 가지 작업이 모두 출력됩니다. 이 모든 것은 출력 문자열에 출력되지 않습니다.
제안 사항?
은'password'는'등의 쉘 메타 문자가 포함 된 경우,'또는'&'또는'*'또는''당신'간부는()'호출이 당신으로 실행되지 않을 수 있습니다?를 배고 있다. 안드로이드가'execve (2)'와 같은 것보다는'system (3)'과 같은 것 같은 것에 접근 할 수 있다면 그것을 사용하는 것이 현명 할 것입니다. (비록 내가 당신의 현재 문제와 관련 있다고 생각하지 않지만.) – sarnold
Nope. 암호에는 특수 문자가 없습니다. 그저 확인해야 할 것이지만 단순한 문자열입니다. 또한 안드로이드는 비록 그것에 대해 많이 알지는 못한다고하더라도 execve가없는 것 같습니다. – normmcgarry