Android设备监视器中的"data"文件夹为空

45

我已经测试了创建、插入和检索应用程序数据库中的数据,并通过使用Log语句的方式知道它可以正常工作。

然而,我希望通过使用Android设备监视器来加快测试和使用速度。但是,尽管数据库存在并存储了数据,但在下面访问时,data文件夹为空:

enter image description here

这是为什么呢?如何配置才能显示数据库文件和内容呢?


在调试模式下,这个答案对我很有帮助: https://dev59.com/XGIk5IYBdhLWcg3wg-jK#42865585 - Rômulo Z. C. Cunha
9个回答

44

使用模拟器解决问题

/data文件夹可能为空,因为您缺少适当的权限。为了解决这个问题,我不得不执行以下命令。

adb shell
su

使用这些命令可以在模拟器中启动一个 shell 并授予您 root 权限。命令 adb 位于 Android SDK 的 platform-tools 文件夹中,在 MacOS 上通常安装在〜/ Library / Android / sdk / 中。

chmod -R 777 /data

修改文件夹(及其子文件夹)/data的权限,使它们在工具 Android 设备监视器中可见。

adb root

最后,此命令将以root身份重新启动adb。小心使用,它只适用于开发构建(通常是模拟器构建)。

之后,您可以查看文件夹/data的内容并传输其中的数据。您也可以在控制台中使用adb pull <remote> <locale>来执行此操作,例如:

adb pull /data/data/<app name>/databases/<database> .

24
除了@Steven K的回答之外:如果你想无需对真实设备进行root就能访问你的数据,你需要在API 23(或更低版本)的模拟器中运行你的应用程序。已知问题是API 23以上的版本会导致在部署Android设备监视器时产生问题。详细信息

10
如果有人遇到了上述问题,请按照以下步骤在终端窗口中操作:
  1. 导航至 /Users/用户名/Library/Android/sdk/platform-tools
  2. 执行 ./adb root 命令
问题解决,就这样。

8

它不是空的……只是你没有权限在设备上查看那个文件夹。

如果你在模拟器中尝试,它会为你工作,因为你有 root 访问权限。


我正在我的个人设备上进行测试。如何获得root访问权限? - Sauron
你只能在已经取得 root 权限的手机上查看数据库。 - Jas

6

如果您想浏览设备数据(data/data)文件夹,有两种方法。

  1. 您需要拥有具有root访问权限的手机才能使用ADM(Android Device Monitor)浏览数据文件夹。

ADM位置 - (YOUR_SDK_PATH\Android\sdk\tools)

  1. 您需要在root模式下运行ADB,通过执行以下命令实现:adb root

如果您只想查看您的数据库和表格,那么最简单的方法是使用Stetho。这是由Facebook开发的一个非常酷的工具,适用于每个使用SQLite的Android开发人员。

使用该工具的步骤

  1. 在应用程序gradle文件(Module: app)中添加以下依赖项

'compile 'com.facebook.stetho:stetho:1.4.2'

  1. 在Activity onCreate()方法中添加以下代码
@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 Stetho.initializeWithDefaults(this);
 setContentView(R.layout.activity_main);
 }
现在,构建您的应用程序。当应用程序运行时,您可以通过在浏览器中打开chrome并输入以下网址来浏览您的应用程序数据库:
chrome://inspect/#devices

以下是相关截图:

Chrome检查器

ChromeInspact

你的数据库

Your DB

希望这能帮到大家!:)

5

请问您能否概述一下如何完成这个任务? - Sauron
2
文件dbfile = new File(“/sdcard/mydb.sqlite”); SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile,null); System.out.println(“它打开了吗? “+ db.isOpen - Steven K

3
在命令提示符中使用GoTo命令:
C:\Users\UserName\android-sdks\platform-tools

执行:

adb root

完成


1
如果你使用的是Windows系统,请按照以下步骤进行操作:
  1. 在Android模拟器中启动应用程序。
  2. 然后以管理员身份打开命令提示符并导航到sdk路径,例如 cd C:\Android\sdk\platform-tools
  3. 输入 adb root
  4. 然后输入 adb pull /data/data/ name-of-your-package /databases/name-of-your-database
  5. 你会在名为 platform-tools 的文件夹中找到你的数据库。

然后,你可以通过Chrome Web Store安装Sqlite Manager扩展程序,并使用它来查看和管理已导出的数据库。

如果你的手机已经取得了Root权限,你可以按照上述步骤进行操作。


1
我也曾遇到过 API_25 的问题,但它对我没有起作用。
配置一个 API_23 模拟器,它可以在 API_23 上运行。

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