安卓应用创建的数据库(通常为SQLite数据库)默认存储在应用安装目录下的 /databases/
文件夹中,具体路径格式如下:
设备类型 | 路径示例 | 说明 |
---|---|---|
物理设备/模拟器 | /data/data/<包名>/databases/<数据库名>.db |
需Root权限或ADB访问 |
Android模拟器 | /mnt/sdcard/Android/data/<包名>/databases/ |
部分模拟器支持直接导出 |
通过Android Studio查看
data → data → <包名> → databases
目录。 通过ADB命令导出
adb shell "run-as <包名> cp /data/data/<包名>/databases/<数据库名>.db /sdcard/" adb pull /sdcard/<数据库名>.db ./
直接查询数据库
在ADB shell中使用SQLite工具:
adb shell run-as <包名> sqlite3 /data/data/<包名>/databases/<数据库名>.db
若需将数据库存储在应用私有目录外(如SD卡),需在创建时指定路径:
// 自定义路径示例(需申请WRITE_EXTERNAL_STORAGE权限) String dbPath = getExternalFilesDir(null) + "/mydatabase.db"; SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(new File(dbPath), null);
存储位置 | 优点 | 缺点 |
---|---|---|
默认路径(/databases) | 自动管理,无需权限 | 仅应用自身可访问 |
外部存储(如SD卡) | 可跨设备共享 | 需动态申请权限,Android 11+受限 |
SQLiteOpenHelper
构造函数指定。File dbFile = new File("/data/data/" + getPackageName() + "/databases/mydb.db"); dbFile.delete();
解答:
adb pull /data/data/<包名>/databases/<数据库名>.db backup/
// 将数据库复制到外部存储 File source = new File("/data/data/" + getPackageName() + "/databases/mydb.db"); File dest = new File(getExternalFilesDir(null), "mydb_backup.db"); try (InputStream in = new FileInputStream(source); OutputStream out = new FileOutputStream(dest)) { ByteStreams.copy(in, out); }
解答:
adb shell
配合run-as
命令(需设备已授权): adb shell run-as com.example.myapp cat /data/data/com.example.myapp/databases/mydb.db > mydb.sql
BackupAgent
或FileObserver
监听数据库变化,通过备份API获取数据(需用户授权