Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android adb未经root权限从/sdcard/to/data/data/package复制文件_Android_Adb_Adb Shell - Fatal编程技术网

Android adb未经root权限从/sdcard/to/data/data/package复制文件

Android adb未经root权限从/sdcard/to/data/data/package复制文件,android,adb,adb-shell,Android,Adb,Adb Shell,我将android设备连接到PC,并通过adb连接。我要做的是将一个文件从我的PC复制到我的应用程序的内部存储器(/data/data/com.example.app/databases),而不使用root或su。我首先将文件从PC推送到android设备的/sdcard/文件夹 adb push database.sqlite /sdcard/ 然后我想将该文件复制到我的应用程序的内部存储器中。我可以成功地作为我的应用程序包运行并查看内部存储 adb shell $ run-as com.e

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

adb push database.sqlite /sdcard/
然后我想将该文件复制到我的应用程序的内部存储器中。我可以成功地作为我的应用程序包运行并查看内部存储

adb shell
$ run-as com.example.app
$ ls databases
这不会导致权限问题。如果我没有问题地使用
运行方式
,我也可以查看
/sdcard/
文件夹

adb shell
$ ls sdcard

问题是,当我第一次使用
run as
时,我无权访问/sdcard/文件夹,当我不使用
run as
时,我无法访问内部存储文件夹。因此,如果我执行
作为
运行,然后执行以下命令:

cp /sdcard/database.sqlite /data/data/com.example.app/databases/
我收到此权限被拒绝错误:

cp: /data/data/com.example.app/databases/database.sqlite: Permission denied
我也尝试了H dd,但没有成功:

dd if=/sdcard/database.sqlite of=/data/data/com.example.app/databases/
# output
dd: /sdcard/database.sqlite: Permission denied
我怎样才能解决这个问题?我没有root访问权限,也没有超级用户(
su
)。我想我可以在没有root的情况下实现这一点,因为使用androidstudio设备文件浏览器,我成功地在同一台android设备上上传了数据库。我只想使用命令行(Windows)来实现这一点


任何帮助都将不胜感激:D

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

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

adb push database.sqlite /data/local/tmp
然后将db文件复制/移动到应用程序的
数据库
文件夹中,方法是:

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

希望这有帮助。

这是我的解决方案,类似于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

“问题是,当我第一次使用run as时,我没有访问/sdcard/文件夹的权限”--您的应用程序是否需要在清单和运行时请求
读取外部存储?否则,应用程序的用户帐户将无法访问外部存储。请注意,由于对外部存储的新限制,所有这些都无法在Android 10+上运行。@Commonware感谢您的建议。我已经在清单中有了
READ\u EXTERNAL\u存储
,但是我不会在运行时请求它。这可能是问题所在吗?@commonware I还从android设备启用了
读取外部存储
,但问题仍然存在。奇怪的是,我对内部存储文件夹的权限被拒绝,而不是SD卡路径(我用确切的错误消息更新了我的问题)自Android 6以来,清单权限不再足够。所以这很可能就是你的罪魁祸首。@Marcin Orlowski那么我该怎么办呢?你知道我能做些什么来解决我的问题吗?非常感谢!这解决了我的问题!!!为了澄清,第二个命令(
adb运行方式…
)不能按原样运行(
unknown命令运行方式
),但我添加了
shell
,它成功了。现在的命令是:
adb shell作为com.example.app cp/data/local/tmp/database.sqlite数据库运行