adb如何在没有root权限的情况下将文件从/sdcard/复制到/data/data/package?

9

我将我的安卓设备连接到电脑并通过adb连接。我想做的是在没有root或su权限的情况下将文件从电脑复制到我的应用程序的内部存储 (/data/data/com.example.app/databases)。首先,我将文件从电脑推送到我的安卓设备的/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

我也尝试使用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


问题在于,当我第一次使用run-as时,我无法访问/sdcard/文件夹。你的应用程序是否需要在清单和运行时请求READ_EXTERNAL_STORAGE权限?如果没有,你的应用程序用户帐户将无法访问外部存储。请注意,由于对外部存储的新限制,这些操作在Android 10+上都不起作用。 - CommonsWare
@CommonsWare 感谢您的建议。我已经在清单文件中添加了READ_EXTERNAL_STORAGE,但是我没有在运行时请求它。这可能是问题所在吗? - Thanasis1101
自从Android 6以后,清单权限已经不再足够。所以这很可能是你的问题罪魁祸首。 - Marcin Orlowski
@Marcin Orlowski,那我该尝试什么?你知道我可以做些什么来解决我的问题吗? - Thanasis1101
正如之前所说,你需要支持运行时权限。去搜索一下 - 有很多库可以帮助你完成。清单权限已经过时了。 - Marcin Orlowski
显示剩余2条评论
2个回答

18

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

特别地,您可以使用以下方式将文件复制到/data/local/tmp

adb push database.sqlite /data/local/tmp

然后使用以下命令将数据库文件复制/移动到应用程序的databases文件夹中:

adb shell run-as com.example.app cp /data/local/tmp/database.sqlite databases
希望这有所帮助。

1
非常感谢!这解决了我的问题!!! 仅供澄清,第二个命令(adb run-as ...)无法正常工作(unknown command run-as),但我添加了 shell 后它就可以工作了。现在的命令是:adb shell run-as com.example.app cp /data/local/tmp/database.sqlite databases - Thanasis1101

-1

这是我类似于 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

3
这个问题的答案有什么补充? - Banana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接