adb shell
进入设备查看
/data/data/包名/databases
目录下的SQLite数据库
Android Studio 4.1 及以上版本提供了 Database Inspector 工具,可实时查看和操作应用的数据库。
启用 Inspector:
build.gradle
中添加依赖: android { ... defaultConfig { javaCompileOptions { annotationProcessorOptions { arguments = [ "room.schemaLocation": "$projectDir/schemas".toString() ] } } } }
@Database
注解中添加 exportSchema = false
。启动应用并打开 Inspector:
查看和操作数据:
如果没有 Database Inspector,可以通过 ADB 将数据库文件导出到本地查看。
获取数据库路径:
/data/data/<包名>/databases/
,/data/data/com.example.app/databases/mydb.db
。使用 ADB 导出数据库:
adb shell "run-as com.example.app cp /data/data/com.example.app/databases/mydb.db /sdcard/" adb pull /sdcard/mydb.db ./
用 SQLite 工具打开:
使用 DB Browser for SQLite(https://sqlitebrowser.org/)或命令行工具查看数据。
工具如 SQLite Browser 或 DBeaver 可通过 USB 连接真机或模拟器。
连接设备:
打开数据库:
/data/data/com.example.app/databases/mydb.db
)。adb
将数据库文件复制到可访问路径。在代码中直接查询数据库并输出日志,适合快速调试。
// 查询所有数据并打印到日志 Cursor cursor = db.query("table_name", null, null, null, null, null, null); while (cursor.moveToNext()) { Log.d("Database", "ID: " + cursor.getInt(0) + ", Name: " + cursor.getString(1)); } cursor.close();
问题 | 解决方案 |
---|---|
数据库文件找不到 | 检查包名、数据库名称是否正确,或尝试用 adb 列出文件:adb shell ls /data/data/<包名>/databases/ |
权限不足 | 真机需 root 权限,或通过 adb 以 run-as 命令绕过权限限制 |
数据未更新 | 确保在代码中调用了 SQLiteDatabase.execSQL("VACUUM;") 或手动关闭应用以刷新数据 |
解答:
adb shell "rm /data/data/com.example.app/databases/mydb.db"
deleteDatabase("mydb.db")
。解答:
RoomDatabase.Builder
的 fallbackToDestructiveMigration
),需先解密: SupportSQLiteDatabase db = RoomDatabase.createDatabase(context, "mydb.db"); // 通过反射或工具类读取解密后的数据
adb
导出加密后的数据库文件,配合密钥工具解密