我正在开发一个应用程序,我知道我的数据库*.db将出现在data/data/com.****.***

我可以在sqlite管理器的帮助下从Eclipse中的AVD访问这个文件

但是我的安卓手机无法访问这个文件。 我谷歌了一下,它说我需要在我的手机上查找,但我不想这样做。

我如何访问我的data/data/.....目录在我的安卓手机“没有根它”?

是否可以更改目录data/data.....的用户权限没有生根?


当前回答

我也曾经遇到过同样的问题。除了adb shell或根设备,没有办法在android设备中直接访问文件。

下面是02种替代方案:

1)

 public void exportDatabse(String databaseName)
   {
     try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath = "//data//"+getPackageName()+"//databases//"+databaseName+"";
            String backupDBPath = "backupname.db";
            File currentDB = new File(data, currentDBPath);
            File backupDB = new File(sd, backupDBPath);

            if (currentDB.exists()) {
                FileChannel src = new FileInputStream(currentDB).getChannel();
                FileChannel dst = new FileOutputStream(backupDB).getChannel();
                dst.transferFrom(src, 0, src.size());
                src.close();
                dst.close();
            }
        }
    } catch (Exception e) {

    }
}

2)试试这个:https://github.com/sanathp/DatabaseManager_For_Android

其他回答

你也可以尝试使用根资源管理器应用程序获取db。如果这不起作用,那么你可以试试这个:

打开cmd 改变目录,进入“平台工具” 类型为“adb shell” 苏 在设备上按“允许” chmod 777 /数据/数据/数据/数据/数据/ com.application。包/数据/数据/ com.application.package / * 在Eclipse中打开DDMS视图,然后从那里打开“FileExplorer”以获得所需的文件

在此之后,您应该能够浏览根设备上的文件。

你可以像这样下载一个文件:

Adb执行run-as debug .app.package.name cat files/file.mp4 > file.mp4

在你下载之前,你可能不想看看你的App-Directory中的文件结构。要做到这一点,请按照上面THelper提到的步骤:

adb shell
run-as com.your.packagename 
cd files
ls -als .

Shahidul提到的Android-Studio方式(https://stackoverflow.com/a/44089388/1256697)也可以。对于那些在菜单中没有看到DeviceFile资源管理器选项的人:请确保在Android Studio中打开/ Android - directory。 例如,react-native用户在他们的Project-Folder中有这个和/ios-Directory在同一级别。

从Android备份到Desktop

打开命令行cmd并运行以下命令: adb backup -f C:\Intel\xxx。Ab -noapk你的。app.package。 不输入密码,点击备份我的数据。 确保不要保存在C根盘上。你可能会被拒绝。 这就是为什么我保存C:\英特尔。

来提取*。ab文件

点击这里下载:https://sourceforge.net/projects/adbextractor/ 解压缩下载的文件,并导航到解压缩的文件夹。 使用自己的文件名运行:java -jar abe.jar unpack c:\Intel\xxx英特尔ab c: \ \ xxx.tar

在根设备上,正确的解决方案是:

Open cmd
Change your directory and go into 'Platform tools'
Type 'adb shell'
su
Press 'Allow' on device
chmod 777 /data /data/data /data/data/*
Open DDMS view in Eclipse/IntelliJ and from there open 'FileExplorer' to get your desired file

原来的解决方案是可行的,但是chmod将返回未知的目录。将chmod命令更改为/data/data/*可以从Intellij中的DDMS访问data目录中的所有子文件夹。我假设同样的解决方案也适用于Eclipse DDMS。

更新 我的发现很奇怪。我正在IntelliJ (Android设备监视器)中使用DDMS运行Nexus 6。我已经构建了一个小入门应用程序。该应用程序将数据保存到data/data/com.example.myapp/files中的.csv文件

When I first started to try to access this file on my Nexus 6, I found that I have to root the device.. I could see the data folder, but trying to open it would not work. As mentioned online in other places, the expand + would vanish then reappear shortly thereafter (note, there are solutions on the web that claim to allow access to these folders without rooting, I didn't find them till too late, and I'm not sure if I prefer not to root anyway ((I'd rather be able to do it manually than rely on an app or command prompt to give me my solutions))). I rooted my 6 and tried DDMS again.

在这一点上,它显示了数据文件夹,我可以展开文件夹,看到com。目录,但我无法打开任何一个。就在那时,我发现了上面的解决方案。最初的说明对这部分不起作用:

chmod 777 /data /data/data /data/data/com.application.pacakage /data/data/com.application.pacakage/*

就在那时,我尝试了我发布的解决方案:

chmod 777 /data /data/data /data/data/*

这个解决方案似乎是可行的,但只适用于某些文件夹。我现在可以展开myapp文件夹,但不能展开其中的文件目录。

在这一点上,我尝试了一段时间,然后想到为什么不直接在我需要的目录上尝试它,而不是尝试这些通配符条目。

chmod 777 /data /data/data /data/data/com.example.myapp/*

紧随其后的是:

chmod 777 /data /data/data /data/data/com.example.myapp/files

这些命令允许我展开并查看应用程序目录中的文件,以确认.csv文件被正确保存。

希望这能帮助到一些人。我为此挣扎了好几个小时!

(更奇怪的是,权限并没有传递给文件目录的.csv文件。我的文件目录权限读DRWXRWXRWX和我的log.csv文件权限读-rw-rw---- ..仅供参考)

其中一个简单的方法是在sd卡上创建数据库。因为你无法访问手机内存中的数据文件夹,除非你对手机进行root操作。那么为什么不简单地在sd卡上创建数据库呢?

此外,如果您愿意,可以编写一些文件复制代码,将现有的数据库文件(从内部内存)复制到外部内存,而不需要任何根。