我目前正在开发适用于 Android 的 WiFi 应用程序。我在尝试访问设备上的数据库时遇到问题。在模拟器中调试对我不起作用,因为模拟器中没有 WiFi 支持。我尝试使用
将数据库文件从设备中拉出adb pull data/data/package-name/databases/database-name
但我收到错误“权限被拒绝。”。 在这个答案Android: Where are database files stored? , Commonsware 建议通过在 Debug模式下运行来拉取数据库文件。但它也不起作用。任何有关如何在不生根设备的情况下调试数据库的帮助将不胜感激。
最佳答案
我会重复 another answer :
Starting from API level 8 (Android 2.2), if you build the application as debuggable, you can use the shell
run-as
command to run a command or executable as a specific user/application or just switch to theUID
of your application so you can access its data directory.
因此,如果您希望从设备中提取应用程序数据库,您应该运行应用程序的调试版本,连接 adb shell
并运行以下命令:
run-as com.yourpackage sh -c "cat ~/databases/db-file" > /sdcard/db-file.sqlite
这会将您的 db-file
复制到 SD 卡/外部存储的根目录。现在,您可以使用文件管理器、adb pull
或其他任何您喜欢的方式轻松地从那里获取它。请注意,使用这种方法,您的应用无需具有 WRITE_EXTERNAL_STORAGE
权限,因为复制是由始终可以写入外部存储的 shell 用户完成的。
在 Linux/Mac 系统上,可以使用以下命令直接将数据库复制到您的计算机,无需进入 adb shell 即可使用:
adb shell 'run-as com.yourpackage sh -c "cat ~/databases/db-file"' > db-file.sqlite
但是,由于 CR/LF 符号转换,这将无法在 Windows 上正常工作。在那里使用前一种方法。
关于android - 在设备上调试 sqlite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6928849/