run-as
-and-cat-to-sdcard 솔루션은 Android 4.4.2에서 나를 위해 일 하지 않았습니다 . 확실하지 않지만 run-as
도구가 새 권한 sdcard_r
과 sdcard_rw
권한을 올바르게 처리하지 못 하기 때문일 수 있습니다 .
먼저 /files
애플리케이션의 개인 내부 저장소에 데이터베이스 파일을 복사해야했습니다 .
shell@hammerhead:/ $ run-as com.example.myapp
shell@hammerhead:/data/data/com.example.myapp $ cp databases/mydb files/mydb
그런 다음 /sdcard/Android/data/com.example.myapp/files
Javaland에서 복사했습니다 ( WRITE_EXTERNAL_STORAGE
허가 필요 ).
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
if (isExternalStorageWritable()) {
final FileInputStream input;
try {
input = openFileInput("mydb");
File output = new File(getExternalFilesDir(null), "mydb");
copy(input, output);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void copy(FileInputStream in, File dst) throws IOException {
OutputStream out = new FileOutputStream(dst);
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
public boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
return Environment.MEDIA_MOUNTED.equals(state);
}
}
마지막으로 파일을 랩톱에 복사했습니다.
$ adb pull /sdcard/Android/data/com.example.myapp/files/mydb
SQLite format 3
문자열로 시작하는지 확인합니다 . 또한 올바른sqlite
버전 인지 확인하십시오 (즉, sqlite2 실행 파일로 sqlite3 데이터베이스를 열려고하지 않음). 또한 다른 SQLite 클라이언트 (예 : SQLiteStudio ) 를 사용해 볼 수도 있습니다 . 도움이되기를 바랍니다.