我会从
另一个答案中重复一遍:
从API级别8(Android 2.2)开始,如果您将应用程序构建为可调试的,则可以使用shell
run-as
命令以特定用户/应用程序的身份运行命令或可执行文件,或者只需切换到您的应用程序的
UID
,以便访问其
data
目录。
将文件复制到设备上的外部存储
因此,如果您希望从设备中提取应用程序数据库,可以从Android Studio启动应用程序的调试版本,使用
adb shell
连接,并运行以下命令:
run-as com.your.package sh -c "cat ~/databases/db-file.db" > /sdcard/db-file.db
或者你可以使用一个更短的版本,它使用相对路径并跳过对主目录的引用
~
,这样就可以省略
sh -c
部分了。
run-as com.your.package cat databases/db-file.db > /sdcard/db-file.db
这将复制您的db-file.db
文件到SD卡/外部存储的根目录。现在,您可以使用文件管理器、adb pull
或其他方式轻松地从那里获取它。请注意,使用此方法,您的应用程序不需要具有WRITE_EXTERNAL_STORAGE
权限,因为复制是由始终可以写入外部存储的shell
用户完成的。
直接将文件复制到计算机
您还可以使用以下命令直接将数据库复制到计算机:
adb shell 'run-as com.your.package cat databases/db-file.db' > db-file.db
上面的
adb shell
命令在Windows主机上不会正常工作,因为会发生
CR/LF
符号转换,除非您从
bash
shell中运行它或者使用未记录的
adb exec-out
命令(一些评论提到他们仍然无法在Windows机器上正确运行,所以结果可能有所不同)。
adb exec-out 'run-as com.your.package cat databases/db-file.db' > db-file.db
将文件写回设备
如果您在计算机上修改了文件并希望将修改写回设备,请使用以下命令:
adb exec-in 'run-as com.your.package tee databases/db-file.db' < db-file.db
如果你更喜欢使用文档未提及的
exec-in
,而不是
adb shell
版本,请使用以下命令(但请阅读关于Windows
CR/LF
转换的注意事项):
adb shell 'run-as com.your.package tee databases/db-file.db' < db-file.db >/dev/null
状态更新
截至2023年7月,以上所有命令仍然有效。