DDMS文件浏览器无法访问数据\数据(HTC Desire HD)

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

Solutions Collecting From Web of "DDMS文件浏览器无法访问数据\数据(HTC Desire HD)"

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

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/ 

在扩展SQLiteOpenHelper时,名字(在我们的例子中是“database.sqlite”)就是你select的名字。 显然,你也需要用你的应用程序包的名字replace“your.package.name”。

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

例如

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

键入adb root 。 现在去你的文件浏览器并检查。

使用复制文件到/ mnt / sdcard

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

使用adb然后从/ mnt / sdcard使用复制到您的桌面

 adb pull /mnt/sdcard/<filename> 

然后使用sqlite3来查看它。

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

但是,您的应用程序无法更改安全电话的/ data目录中缺less列表权限。

因此,您将不得不使用'adb pull / full / path / to / file'来抓取文件 – 由于无法生成/ data或其他几个中间目录父目录的列表,因此您无法浏览该文件。

真正解决这个问题的唯一办法就是把你的文件放在一些你可以在开发过程中像在SD卡上一样访问的地方。 然后,一旦你满意的事情是正确的工作,把你想要的文件。

我这样说是因为我有零售Nexus One和开发商Nexus One。 在使用DDMS文件资源pipe理器时,我注意到我可以浏览开发人员设备上的数据文件夹,但无法在零售设备上浏览。 我植根于我的零售设备,并没有帮助。

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