安卓设备管理器: "传输错误:权限被拒绝"

9
我正在尝试拉取我的应用程序数据库文件。我可以看到在数据库文件中我拥有所有的权限"-rwxrwxrwx",这是我通过 chmod -r 777 /data/data/com.example.myapp 提供的权限。但是我无法将它拉出来,并且设备管理器不断崩溃。我每次尝试拉取时都会收到上述错误。
我正在使用 Android Studio,在 Mac 上使用具有 root 访问权限的设备。这就是我要拉取的内容。
以下是我运行命令时遇到的错误:Package 'com.example.hackbot' has corrupt installation
run-as com.example.hackbot chmod /data/data/com.example.hackbot/databases/HackBotDB

任何帮助都是有价值的。
祝好!

我找到了一种方法,但看起来很丑陋且耗时,但是它能够工作。我从Play商店下载了ES文件浏览器文件管理器(任何可以访问根文件的浏览器都可以),搜索了应用程序中的db文件,复制了该文件并将其移动到SD卡,然后我就能够从设备管理器中访问它了。然后只需将其移动到DB Browser for SQL Lite中查看数据库即可。 - rd22
我希望还有其他解决方案,一种不那么痛苦的。如果有的话,请告诉我。这几乎占据了我整整一天的时间,但我仍然没有一个完美的解决方案。 - rd22
3个回答

12

以下操作简单易行:

  1. 将您的设备连接到计算机,并从命令行或终端运行 adb shell
  2. 进入shell后,运行 run-as com.myapplication.packagname
  3. 然后进入数据库文件夹 cd databases
  4. 运行 cat my_datbase_name.db > /sdcard/my_database_name_temp.db
  5. 输入 exit 两次以返回到正常的终端提示符
  6. 运行 adb pull /sdcard/my_database_name_temp.db 即可完成操作

你可以下载sqlitebrowser来查看这些数据。


哦,是的,这将从命令提示符中复制文件。谢谢。 - rd22
@endlessProgrammer 很高兴能够帮助。 - kandroidj

4

adb shell的Linux用户和您的应用程序Linux用户是不同的。因此,出于安全考虑,您无法从adb获取私有应用程序数据,但可以像您所做的那样进行复制。我同意,这很混乱和不干净,但它是设计成这样的。因此,我的建议是在您的应用程序中添加Stetho。您可以从Chrome监视您的数据库,以及获取其他调试信息。


-1
  1. 使用Android模拟器运行应用程序,然后转到->工具->Android设备监视器。打开对话框,进入文件资源管理器->数据文件夹(授予权限给数据文件夹)。
    • 使用开始菜单打开cmd
    • 进入sdk文件夹(例如,C:\Users\android-sdks\platform-tools>)
    • 输入adb shell
    • su
    • chmod 777 /data
    • chmod 777 /data/data/in.co.gesardisplays.www.rwfiles/files/gesar.txt 更改将在adb监视器中生效
  2. 将文件拉到文件夹中
    • 退出shell
    • 按照上一步骤1.2
    • 输入adb root
    • adb pull /data/data/in.co.gesardisplays.www.rwfiles/files/ 或者 选择您的文件,单击“拉取文件”图标,它将位于文件资源管理器的右上角

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