【问题标题】:DDMS file explorer can't access data\data (HTC Desire HD)DDMS 文件资源管理器无法访问数据\数据 (HTC Desire HD)
【发布时间】:2011-06-23 13:14:47
【问题描述】:

我正在编写一些 SQLite 代码并想检查数据库。如果我在模拟器上运行代码,我可以使用 DDMS 文件管理器从 data\data\myProject\databases 中提取文件,但如果我在实际硬件上运行它,则无法访问 data\data 文件夹。除了获得手机的root访问权限之外,还有什么办法吗?

【问题讨论】:

  • 你必须为你的手机root。
  • 您必须是 root 才能通过浏览来执行此操作,但程序可以更改文件的权限,使其可以通过其完整路径名访问。

标签: android sqlite ddms


【解决方案1】:

SQLite 数据库实际上只是一个存储在手机内存中的文件,您可以将其复制到手机 SD 卡,然后从 PC 轻松访问它。以下是完全符合您需要的功能。只需确保在使用函数之前更改您的包名称和数据库名称。

public static void backupDatabase() throws IOException {
    //Open your local db as the input stream
    String inFileName = "/data/data/your.package.name/databases/database.sqlite";
    File dbFile = new File(inFileName);
    FileInputStream fis = new FileInputStream(dbFile);

    String outFileName = Environment.getExternalStorageDirectory()
                                                    + "/database.sqlite";
    //Open the empty db as the output stream
    OutputStream output = new FileOutputStream(outFileName);
    //transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = fis.read(buffer))>0){
        output.write(buffer, 0, length);
    }
    //Close the streams
    output.flush();
    output.close();
    fis.close();
}

从代码中可以看出,数据库始终存储在文件夹中:

/data/data/your.package.name/databases/

名称(在我们的示例中为“database.sqlite”)是您在扩展 SQLiteOpenHelper 时选择的名称。显然,您还需要将“your.package.name”替换为您的应用程序包的名称。

【讨论】:

  • 对于我们这些没有root手机的人来说,这是一个很好的技术。只需确保添加权限 WRITE_EXTERNAL_STORAGE 否则它将不起作用。它被我的异常处理程序捕获,所以我错过了。
  • 嗨,我试过了,但我真的没有看到数据文件在哪里?我使用的是 windows,我的 android 文件存储在工作区下,但我的包下没有数据文件
【解决方案2】:

您必须根植您的设备。转到命令提示符并转到您的 adb 所在的位置。

例如

C:\Program Files\Android\android-sdk\platform-tools

输入adb root。现在转到您的文件资源管理器并检查。

【讨论】:

    【解决方案3】:

    使用复制文件到/mnt/sdcard

    cp /data/data/<packagename>/databases/<dbname>/<filename> /mnt/sdcard 
    

    使用 adb,然后使用

    从 /mnt/sdcard 复制到您的桌面
    adb pull /mnt/sdcard/<filename> 
    

    然后使用 sqlite3 来查看。

    【讨论】:

      【解决方案4】:

      我相信您的应用程序可以更改其本地存储数据文件的 unix 权限,以便其他应用程序和 adb 可以访问它们。

      但是,您的应用程序无法更改安全手机的 /data 目录上缺少列表权限的情况。

      因此,您必须使用 'adb pull /full/path/to/file' 获取文件 - 您无法浏览到它,因为您无法生成 /data 列表或可能的其他几个中间目录父级你的文件。

      【讨论】:

        【解决方案5】:

        真正解决这个问题的唯一方法是将文件放在可以访问它的地方,就像在开发过程中放在 sdcard 上一样。然后,一旦您感到满意,事情就可以正常工作,将文件放在您想要的任何位置。

        我这样说是因为我有一个零售 Nexus One 和开发者 Nexus One。在使用 DDMS 文件资源管理器时,我注意到我可以在开发人员设备上浏览数据文件夹,但不能在零售设备上浏览。我植根了我的零售设备,但它没有帮助。

        所以我想在这个问题上需要做更多的研究。但在那之前,我希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-10-12
          • 1970-01-01
          • 1970-01-01
          • 2013-01-11
          • 1970-01-01
          • 2011-10-20
          • 1970-01-01
          相关资源
          最近更新 更多