7

我将我的 android 设备连接到 PC 并通过 adb 连接。我想要做的是将文件从我的 PC 复制到我的应用程序 ( /data/data/com.example.app/databases) 的内部存储中,无需 root 或su. 我首先将文件从我的 PC 推送到/sdcard/我的 android 设备的文件夹中。

adb push database.sqlite /sdcard/

然后我想将该文件复制到我的应用程序的内部存储中。我可以成功运行我的应用程序包并查看内部存储。

adb shell
$ run-as com.example.app
$ ls databases

这不会导致权限问题。/sdcard/如果我不使用run-as 也没问题,我也可以查看文件夹

adb shell
$ ls sdcard

问题是当我第一次使用时run-as我无法访问 /sdcard/ 文件夹,当我不使用时run-as我无法访问内部存储文件夹。所以,如果我执行run-as然后执行这个:

cp /sdcard/database.sqlite /data/data/com.example.app/databases/

我收到此权限被拒绝错误:

cp: /data/data/com.example.app/databases/database.sqlite: Permission denied

我也试过 withh dd 但没有用:

dd if=/sdcard/database.sqlite of=/data/data/com.example.app/databases/
# output
dd: /sdcard/database.sqlite: Permission denied

我怎么解决这个问题?我没有 root 访问权限,也没有超级用户 ( su)。我想我可以在没有 root 的情况下实现这一点,因为使用 android studio 设备文件资源管理器我设法将数据库上传到同一个 android 设备中。我只想使用命令行(Windows)来做到这一点。

任何帮助将不胜感激:D

4

2 回答 2

10

我的建议是在将数据库文件复制到应用程序的私有区域时使用不同的方法。

特别是,您可以将文件复制到/data/local/tmp

adb push database.sqlite /data/local/tmp

然后将 db 文件复制/移动到应用程序的databases文件夹中:

adb shell run-as com.example.app cp /data/local/tmp/database.sqlite databases

希望这可以帮助。

于 2020-01-01T20:49:15.210 回答
0

这是我的解决方案,类似于 Lino 的回答

adb shell rm -rf /sdcard/[CLONE_FODER]/
adb push ./[YOUR_FOLDER]/[YOUR_FILE] /sdcard/CLONE_FODER/. 
adb shell run-as com.android.example cp -r /sdcard/CLONE_FODER/YOUR_FILE /data/data/com.android.example/databases
于 2020-01-10T06:57:12.177 回答