在安卓开发中,通过 SQLiteOpenHelper
创建的数据库文件默认保存在应用的内部存储空间中,具体路径如下:
路径组成 | 说明 |
---|---|
/data/data/ |
安卓系统为每个应用分配的私有数据目录,只有当前应用可读写。 |
<包名>/ |
应用安装后生成的目录,com.example.myapp/ 。 |
databases/ |
系统为数据库文件创建的子目录。 |
<数据库名称>.db |
开发者指定的数据库文件名(如 mydatabase.db )。 |
完整路径示例:/data/data/com.example.myapp/databases/mydatabase.db
// 通过 SQLiteDatabase 对象获取路径 String dbPath = myDatabase.getPath(); // 或通过 Context 获取路径 File dbFile = context.getDatabasePath("mydatabase.db"); String path = dbFile.getAbsolutePath();
adb shell run-as com.example.myapp cat /data/data/com.example.myapp/databases/mydatabase.db > backup.db
Device File Explorer
中导航至 /data/data/<包名>/databases/
,导出文件。场景 | 说明 |
---|---|
应用卸载 | 数据库文件会被自动删除。 |
清除应用数据 | 数据库文件会被清空,但文件本身保留(可通过代码重新初始化)。 |
多设备兼容性 | 路径由系统管理,无需手动处理不同设备的存储差异。 |
Android 10+ 限制 | 数据库仍保存在内部存储,但外部存储(如 SD 卡)需声明 scoped storage 。 |
解答:
使用 ADB 命令或 Android Studio 的 Device File Explorer
:
adb shell run-as com.example.myapp cp /data/data/com.example.myapp/databases/mydatabase.db /sdcard/ adb pull /sdcard/mydatabase.db ./
Device File Explorer
中导航至 /data/data/<包名>/databases/
。 解答:
SQLiteOpenHelper
和 ContentProvider
,系统会自动处理路径差异。 requestLegacyExternalStorage
(仅限临时适配),但数据库建议始终存储在内部空间以保证安全性。 context.getDatabasePath()
动态获取路径