run-as
在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)。希望能帮助到你。