373

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

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

但我无法在我的 Android 手机中访问此文件。
我用谷歌搜索它,它说我需要root我的手机才能做到这一点,但我不想这样做。

如何data/data/.....在我的 Android 手机中访问我的目录“无需生根”?

我可以在data/data.....不生根的情况下更改目录的用户权限吗?

4

18 回答 18

430

直接在手机上访问文件很困难,但您可以将它们复制到您的计算机上,在那里您可以做任何您想做的事情。如果不生根,您有两种选择:

  1. 如果应用程序是可调试的,您可以run-as在 adb shell 中使用该命令

    adb shell
    run-as com.your.packagename 
    cp /data/data/com.your.packagename/
    
  2. 或者,您可以使用 Android 的备份功能。

    adb backup -noapk com.your.packagename
    

    现在将提示您“解锁您的设备并确认备份操作”。最好不要提供密码,否则读取数据变得更加困难。只需单击“备份我的数据”。您计算机上生成的“backup.ab”文件包含 android 备份格式的所有应用程序数据。基本上它是一个压缩的 tar 文件。本页解释了如何使用 OpenSSL 的 zlib 命令解压缩它。您可以使用该 adb restore backup.db命令恢复备份。

于 2013-07-26T08:38:41.073 回答
168

如果您使用的是 Android Studio 3.0 或更高版本,请按照以下步骤操作。

  1. 单击视图>工具窗口>设备文件资源管理器
  2. 展开/data/data/[package-name]节点。

您只能扩展在非 root 设备上以调试模式运行的包。

Android Studio 3.0 中遵循的步骤

于 2017-05-20T18:24:29.577 回答
59

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

  1. 打开命令
  2. 更改您的目录并进入“平台工具”
  3. 键入“ adb shell
  4. su
  5. 在设备上按“允许”
  6. chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
  7. 在 Eclipse 中打开 DDMS 视图,然后从那里打开“FileExplorer”以获取您想要的文件

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

于 2012-10-22T07:17:58.373 回答
22

要执行上述任何操作(即从手机本身访问受保护的文件夹),您仍然需要 root。(这包括更改 /data 文件夹的挂载权限并访问它)

如果没有 root,则无法通过代码/data应用程序中直接访问以进行读取。因此,您可以尝试将该文件复制到 sdcard 或可访问的地方,然后,您应该能够正常访问它。

如果您拥有开发人员设备,则生根不会使您的保修失效。对不起,AFAIK 没有其他方法。

于 2012-10-22T07:03:47.160 回答
13
  1. 打开你的命令提示符
  2. 将目录更改为 E:\Android\adt-bundle-windows-x86_64-20140702\adt-bundle-windows-x86_64-20140702\sdk\platform-tools
  3. 输入以下命令
  4. adb -d shell
  5. run-as com.your.packagename cat databases/database.db > /sdcard/database.db
  6. 将目录更改为cd /sdcard以确保database.db存在。
  7. adb pull /sdcard/database.db或者只是你可以从 device 复制 database.db 。
于 2014-09-11T10:44:43.360 回答
13

/data/data/package.name/databases/file在无根的 Android 5.0+ 设备上从可调试的应用程序文件夹(比如说)中提取文件的最简单方法(只需一个简单步骤)是使用以下命令:

adb exec-out run-as package.name cat databases/file > file
于 2015-08-07T15:07:34.017 回答
10

在 Eclipse 中使用文件资源管理器。选择 Windows => 显示视图 => 其他 ... => 文件资源管理器。

另一种方法是通过 adb 拉取文件:

adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard
于 2012-10-22T07:05:21.233 回答
7

从 Android 备份到桌面

打开命令行 cmd 并运行: adb backup -f C:\Intel\xxx.ab -noapk your.app.package。不要输入密码,然后单击备份我的数据。确保不要保存在驱动器 C 根目录上。你可能会被拒绝。这就是我保存在 C:\Intel 上的原因。

提取 *.ab 文件

  1. 去这里下载:https ://sourceforge.net/projects/adbextractor/
  2. 提取下载的文件并导航到您提取的文件夹。
  3. 使用您自己的文件名运行它:java -jar abe.jar unpack c:\Intel\xxx.ab c:\Intel\xxx.tar
于 2017-01-04T19:44:16.163 回答
4

可能是要访问这个文件夹你需要管理权限。

所以你有两个选择: -

  1. 根您的设备,然后尝试访问此文件夹
  2. 使用模拟器

ps:如果您使用以上两个选项中的任何一个,您可以按照以下步骤访问此文件夹

打开 DDMS 透视图 -> 您的设备 ->(从右侧窗口选项中选择文件资源管理器)选择包 -> 数据 -> 数据 -> 包名称 -> 文件

从那里你可以提取你的文件

于 2014-07-11T13:02:56.777 回答
4

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

adb exec-out run-as debuggable.app.package.name cat files/file.mp4 > file.mp4

在下载之前,您可能不想查看 App-Directory 中的文件结构。为此,请执行THelper上面提到的以下步骤:

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

提到的Android-Studio方式( https://stackoverflow.com/a/44089388/1256697)也有效。对于那些在菜单中看不到选项的人:请务必在 Android Studio 中打开 /android-Directory。例如,react-native 用户他们的项目文件夹中与 /ios 目录处于同一级别。ShahidulDeviceFile Explorer

于 2018-08-10T06:11:10.873 回答
4

我曾经也遇到过同样的问题。除了 adb shell 或 root 设备外,无法直接访问 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

于 2015-08-23T18:30:00.047 回答
4

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

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 访问数据目录中的所有子文件夹。我假设 Eclipse DDMS 也有同样的解决方案。

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

当我第一次开始尝试在我的 Nexus 6 上访问这个文件时,我发现我必须 root 设备.. 我可以看到数据文件夹,但尝试打开它是行不通的。正如其他地方在网上提到的那样,expand + 会消失,然后很快就会重新出现(注意,网上有一些解决方案声称允许在不生根的情况下访问这些文件夹,我直到为时已晚才找到它们,我不确定我是否不想root((我宁愿能够手动完成,而不是依靠应用程序或命令提示符来给我我的解决方案)))。我植根了我的 6 并再次尝试了 DDMS。

此时,它向我显示了数据文件夹,我可以展开文件夹并查看 com. 目录,但我无法打开其中任何一个。那是我发现上述解决方案的时候。初始说明不适用于这部分:

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

那是我尝试发布的解决方案时:

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

该解决方案似乎有效,但仅适用于某些文件夹。我现在可以展开 myapp 文件夹,但无法展开其中的 files 目录。

在这一点上,我玩了一会儿,然后想为什么不在我需要的目录上尝试它而不是尝试这些通配符条目。

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--- - .. 仅供参考)

于 2015-10-24T23:54:07.427 回答
2

adb backup对我不起作用,所以这就是我所做的(小米红米 Note 4X,Android 6.0):
1. 转到设置 > 其他设置 > 备份和重置 > 本地备份
2. 点击屏幕底部的“备份”。
3. 取消选中“系统”和“应用程序”复选标记。
4. 点击“应用程序”单元右侧的详细信息披露按钮以导航到应用程序选择屏幕。
5. 选择所需的应用程序并点击确定。
6.备份完成后,实际文件需要以某种方式定位。我的可以在/MIUI/backup/AllBackup/_FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_ 找到
7. 然后我按照RonTLV这个答案的步骤将备份文件(在我的情况下为 .bak)实际转换为 tar(从原始答案复制):

a)转到此处下载:https
://sourceforge.net/projects/adbextractor/ b)提取下载的文件并导航到您提取的文件夹
。c) 使用您自己的文件名运行它: java -jar abe.jar unpack c:\Intel\xxx.ab c:\Intel\xxx.tar
"

于 2018-06-05T23:54:54.917 回答
1

一种简单的方法是在 SD 卡上创建数据库。因为您无法访问手机内部存储器中的数据文件夹,除非您对手机进行 root。那么为什么不简单地在 SD 卡上创建您的数据库。

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

于 2012-10-22T07:14:56.220 回答
0

您可以将此 db 文件复制到 eclipse explorer 中的某个位置(例如:sdcard 或 PC),您可以使用 sqlite 访问和更新此 db 文件。

于 2013-07-11T08:36:06.010 回答
0

SQLlite 数据库存储在用户的手机上,它隐藏在路径下:

/Data/Data/com.companyname.AppName/File/

你有两个选择:

  1. 你可以root你的手机,这样你就可以查看你隐藏的db3文件
  2. 这不是解决方案,而是解决方法。为什么不使用“选择”语句创建显示数据库表的测试页面。
于 2019-12-12T20:20:44.463 回答
0

您也可以尝试将文件复制到 SD 卡文件夹,这是一个公共文件夹,然后您可以将文件复制到您的 PC,您可以使用 sqlite 访问它。

以下是一些可用于将文件从 data/data 复制到公共存储文件夹的代码:

private void copyFile(final Context context) {
    try {
        File sd = Environment.getExternalStorageDirectory();
        File data = Environment.getDataDirectory();

        if (sd.canWrite()) {
            String currentDBPath =
                    context.getDatabasePath(DATABASE_NAME).getAbsolutePath();

            String backupDBPath = "data.db";

            File currentDB = new File(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) {
        e.printStackTrace();
    }
}

显现:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
于 2017-12-18T20:51:56.057 回答
-1

问题是:如何在 Android 设备中访问数据数据文件夹?


如果 android-device 是 Bluestacks * Root Browser APK 显示 data/data/..


尝试从 https://apkpure.com/root-browser/com.jrummy.root.browserfree下载根浏览器


如果文件是文本文件,您需要点击“打开为”、“文本文件”、“打开为”、“RB 文本编辑器”

于 2016-03-16T05:39:34.363 回答