为什么在尝试将Sqlite文件推送到已root的Android设备时会出现"Permission Denied"错误?

4
所以我有一个本地的Sqlite文件,我想要将它推送到我的Rooted Android设备(Nexus 7 2013)。我已经确认过这个设备是Rooted的,因为我尝试了adb shellsu命令并且看到#符号显示而不是$符号。
我正在尝试运行以下命令:
adb push D:\tfs\MyApp\MyDatabase.db3 /data/data/MyApp/files/MyDatabase.db3

但是我一直收到以下错误信息:

无法将...MyApp...复制到...MyApp...:权限被拒绝

我在互联网上搜索并找到了答案这里这里,并总结出以下内容:

adb shell su -c "mount -o rw,remount /data"
adb shell su -c "chmod 777 /data"

即使我运行了上述两个命令并运行了我的Push命令,我仍然收到权限被拒绝的错误提示。

我做错了什么?

5个回答

21

'adb push' 无法将文件推送到 data/data/ 目录下。不过,你可以使用传输站来完成:

adb push D:\tfs\MyApp\MyDatabase.db3 ~/sdcard/MyDatabase.db3

adb shell

su

mv /sdcard/MyDatabase.db3 /data/data/MyApp/files/MyDatabase.db3

对我有效,祝你好运。


你刚刚帮我省了另外30分钟的时间,因为我不用再尝试将自定义APK文件推送到/data/temp文件夹了。 - Hao Nguyen
在Linux中,复制SD卡的命令是./adb push ~/fastdroid-vnc /sdcard/fastdroid-vnc - Haris

3
将一个APK文件(例如"MyApp")从本地的C:/Apps推送到/data/local/tmp/目录下,但执行adb push C:/Apps/MyApp /data/local/tmp/时会出现“Permission Denied”(权限被拒绝)错误。
使其正常工作的步骤(按照以下顺序执行):
  1. adb shell
  2. su
  3. chmod 777 /data/local/tmp/
  4. exit
  5. chmod 777 /data/local/tmp/
  6. exit
现在可以使用adb push命令了。
adb push C:/Apps/MyApp /data/local/tmp/

为什么要重复步骤3和4? - Kaitlyn
一个步骤是为根用户,退出后,另一个步骤是为当前用户。 - Sravya Yellapragada

2

简单解决方案:

  • 使用以下命令代替: .\adb.exe push c:/files-to-push.zip /sdcard/Download

我的问题

在进入 adb 文件夹(在我的情况下是 c:/adb)后,我连接了:

.\adb.exe connect 127.0.0.1:58526

然后我尝试通过运行以下命令将这个 zip 文件 c:/Games/pokemon.zip 推送到设备上:

.\adb.exe push c:/Games/pokemon.zip /mnt/sdcard/Download

但我遇到了以下错误:

adb: error: stat failed when trying to push to /mnt/sdcard/Download: Permission denied

解决方案说明:

我试图将文件推送到不存在的路径...

在我的情况下,我试图将文件推送到 /mnt/sdcard/Download

然后,运行 adb shell 后,我获得了访问控制台的权限

最后,只需键入 ls 检查我有哪些文件夹

在我的情况下,我发现没有 /mnt

所以之后我尝试运行 ls /sdcard,并在那里找到了 Download 文件夹...


1

好的,这是我的解决方案。

我的手机已经被Root了,但出于某种原因,这还不足以做任何你想做的事情。

我不得不去下载一个名为adbd insecure的apk到我的设备上,该应用在这里提到,你可以从那个帖子或谷歌应用商店下载。然后我必须打开我的设备上的应用程序,并点击"启用不安全的adbd",我还点击了"开机启用"

之后运行我的正常命令:

adb push D:\tfs\MyApp\MyDatabase.db3 /data/data/MyApp/files/MyDatabase.db3

工作过。

0

运行以下命令:

adb root

或者

adb wait-for-device root && adb remount

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