我将我的android设备连接到PC,并通过adb连接。我想要做的是将一个文件从我的PC复制到我的应用程序(/data/data/com.example.app/databases
)的内部存储中,而不需要根目录或su
。我首先将文件从我的PC推送到安卓设备的/sdcard/
文件夹中。
adb push database.sqlite /sdcard/
然后,我想将该文件复制到我的应用程序的内部存储中。我可以成功地运行-作为我的应用程序包并查看内部存储。
adb shell
$ run-as com.example.app
$ ls databases
这不会导致权限问题。如果我使用run-as
没有任何问题,我还可以查看/sdcard/
文件夹
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
我也尝试了did,但不起作用:
dd if=/sdcard/database.sqlite of=/data/data/com.example.app/databases/
# output
dd: /sdcard/database.sqlite: Permission denied
我该如何解决这个问题?我既没有超级用户访问权限,也没有超级用户(su
)。我认为我可以在没有root的情况下实现这一点,因为使用android studio设备文件资源管理器,我成功地在同一个android设备中上传了数据库。我只想用命令行(Windows)来做这件事。
任何帮助都将不胜感激:D
发布于 2020-01-02 04:49:15
我的建议是在将数据库文件复制到应用程序的私有区域时使用一种不同的方法。
特别是,您可以使用以下命令将文件复制到/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-10 14:57:12
这是我的解决方案,类似于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
https://stackoverflow.com/questions/59437523
复制相似问题