2013-10-21 2 views
1

나는 다음 sqlite3 데이터베이스를 덤프 문자열로 읽어 코드를 가지고 : 내 에뮬레이터 난 괜찮아,하지만 내가 진짜 전화에서 실행할 때 작동하지 않습니다에서 실행SQLite3 데이터베이스 덤프를 실행하는 데 필요한 Android 권한은 무엇입니까?

String dbPath = "/data/data/com.company.project/databases/project.db"; 
    String outputPath = "/data/data/com.company.project/databaseDump.txt"; 

    Process proc = Runtime.getRuntime().exec("sqlite3 " + dbPath + " '.dump' > " + outputPath); 
    proc.waitFor(); 
    returnString = FileUtil.getStringFromFile(outputPath); 

. 매니페스트에 추가 권한을 추가해야하는지, 내가 누락 된 항목이 있는지 궁금합니다. EDT

는 그래서 파일의 읽기 에뮬레이터에서 잘 작동 것을 나는 ADB를 통해 후 수동으로 덤프를 실행 ... 내 문제의 일부가 PEBKAC이었다 보인다. 그래서 dump 명령은 에뮬레이터에서 작동하는 것처럼 보이지 않습니다 ... sqlite3 프로그램에 대한 의도를 수행해야합니까? 그렇다면 특정 프로그램에 대해 어떻게해야합니까?

답변

0

SQLite3adb에서 실행할 수있는 명령이지만, 반드시 휴대 전화에있는 것은 아닙니다. 나는 다른 접근법을 취했다. Android의 DatabaseUtils를 사용하여 필자가 필요한 결과를 얻을 수있었습니다. DatabaseUtils.dumpCursorToString(cursor). 내가 관심을 가졌던 테이블 각각에 대해이 작업을 수행하고 반환 문자열을 작성했습니다.

+1

이것은 근본적으로 잘못된 것입니다. adb *에서 실행되는 모든 것은 "전화로 실행"됩니다. 애플리케이션의 것이 아니라 adb의 userid로 실행되지만 소스 파일과 대상 파일은 문제가되어서는 안되는 작업을 수행하려고 시도하는 응용 프로그램 사용자 ID (또는 전역 액세스 가능)가 소유하고 있어야합니다. 즉, 프로세스를 시작하는 것이 Android 앱에서 바람직한 일은 아닙니다. –