2012-04-17 5 views
0

직접 /data/data/com.android.providers.telephony/databases/mmssms에있는 파일을 복사하는 Android 애플리케이션을 직접 작성하려고합니다. db를 내 sdcard의 위치로 /sdcard/test/mmssms.db/data/루트 권한으로 mmssms.db 백업

장치가 루팅되어 있고 응용 프로그램에 수퍼 유저 액세스 권한이 부여되었지만 파일이 실제로 복사되지 않습니다. 대상 디렉토리가 존재하고 응용 프로그램 용 SDK가 1.5입니다. 다음은 백업을 수행하는 데 사용되는 명령입니다.

Runtime.getRuntime().exec("su"); 

Runtime.getRuntime().exec("mount -o rw,remount -t yaffs2 /data/data/com.android.providers.telephony/databases /data"); 

Runtime.getRuntime().exec("chmod -R 777 /data/data/com.android.providers.telephony/databases"); 

Runtime.getRuntime().exec("cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/test/mmssms.db"); 

다음 권한을 매니페스트 XML에 사용되는 : 난 그냥하고 싶은

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

내가 그 파일을 복사 할 수 있도록 무엇을 할 수 있는지 알 수 및/데이터에서 다른 사람/예배 규칙서. 시간 내 줘서 고마워.

답변

0

정확하게 똑같은 문제가 있습니다. 앱에서 제대로 작동하지 않는 것 같습니다. 몇 가지 도움이 비록 당신의 코드에 대한 참고 사항 :. 간부의 각 invokation이 같은 priveledges에 새로운 자식 프로세스를 시작하기 때문에 Runtime.getRuntime()에 대한 별도의 호출로이 명령을 실행

  • 간부는(), 무의미 앱으로 exec ("su")를 실행하면 새로운 프로세스이기 때문에 다음 명령 (mount, chmod 등)에 대한 루트 권한을 부여하지 않습니다.

  • "mount -o rw ...."를 실행하는 것은이 파티션에서 읽기만하고 쓰기는 필요 없기 때문에 필요하지 않아야합니다 (예 : "su -c"명령). .

누군가가이 문제를 해결했는지 알고 싶습니다. ES 파일 탐색기 (루트 액세스 권한 포함)를 사용하여 파일을 복사해도 문제없이 작동합니다. 또한 USB를 통해 PC에서 루트 ADB 셸을 사용하여 파일을 복사 할 수 있습니다. 또한 내 응용 프로그램에는 Manifest.xml에 WRITE_EXTERNAL_STORAGE 권한이 설정되어 있습니다.