如何访问数据/数据文件夹在Android设备?

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

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

但是我的安卓手机无法访问这个文件。< br / > 我谷歌了一下,它说我需要root我的手机来做这件事,但我不想这样做

如何访问我的Android手机中的data/data/.....目录"没有生根"

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

816003 次浏览

要做到以上任何一项(即从手机本身访问受保护的文件夹),你仍然需要root。(这包括更改/data文件夹的挂载权限并访问它)

没有根,直接访问/data通过代码读取除了在你的应用程序是不可能的。所以你可以试着把那个文件复制到sdcard或者其他可以访问的地方,然后,你就可以正常访问它了。

如果您使用的是开发人员设备,那么root不会使您的保修失效。对不起,我没有别的办法了。

使用eclipse中的文件资源管理器。Select Windows => Show View => Other…>文件资源管理器。

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

adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard

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

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

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

  1. 打开cmd
  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”以获得所需的文件

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

你可以复制这个db文件到eclipse资源管理器的某个地方(例如:sdcard或PC),你可以使用sqlite访问和更新这个db文件。

直接在手机上访问文件是困难的,但你可以将它们复制到你的电脑上,在那里你可以对它做任何你想做的事情。 如果没有root,您有两个选项:

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

    adb shell
    run-as com.your.packagename
    cp /data/data/com.your.packagename/
    
  2. Alternatively you can use Android's backup function.

    adb backup -noapk com.your.packagename
    

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

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

所以你有两个选择:-

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

附注:如果您正在使用上述两个选项中的任何一个,您可以通过以下步骤访问此文件夹

打开DDMS透视图->您的设备->(选择文件资源管理器从 右窗口选项)选择package -> data -> data -> package name 文件- > < / p >

从那里你可以调出你的文件

  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。

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

adb exec-out run-as package.name cat databases/file > file

我也曾经遇到过同样的问题。除了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

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

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文件

当我第一次尝试在我的Nexus 6上访问这个文件时,我发现我必须对设备进行根操作。我可以看到数据文件夹,但试图打开它行不通。正如网上其他地方提到的,expand +会消失,然后在不久之后重新出现(注意,网上有解决方案,声称允许访问这些文件夹而不根,我直到太晚才找到它们,我不确定我是否更喜欢不根(我宁愿能够手动操作,而不是依赖于应用程序或命令提示符给我的解决方案)))。我又试了一次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文件夹,但不能展开其中的文件目录。

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

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

从Android备份到Desktop

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

来提取*。ab文件

  1. 去这里下载:https://sourceforge.net/projects/adbextractor/
  2. 解压缩下载的文件,并导航到解压缩的文件夹。
  3. 用你自己的文件名运行:解压缩c:\Intel\xxx. jar英特尔ab c: \ \ xxx.tar

如果你使用的是Android Studio 3.0或更高版本,请遵循以下步骤。

  1. 单击“视图 > 工具窗口 > 设备文件资源管理器”。
  2. 展开/ /数据/(包名)节点。

只能展开在非根设备上以调试模式运行的包。

Steps follows in Android Studio 3.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" />

adb backup没有为我工作,所以这是我所做的(小米红米Note 4X, Android 6.0):
1. 去>附加设置>备份&放大器;reset >本地备份
2. 点击屏幕底部的“Back up” 3.取消选中“系统”和“应用程序”复选符号 4. 点击“应用程序”单元格右侧的细节显示按钮,导航到应用程序选择屏幕 5.
.选择应用,轻按“确定” 6. 备份完成后,需要以某种方式定位实际文件。我的可以在/ MIUI /备份/ AllBackup / _FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_找到。
7. 然后我按照这个答案RonTLV的步骤将备份文件(在我的例子中是.bak)实际转换为tar(从原始答案复制):
“< br > a)到这里下载:https://sourceforge.net/projects/adbextractor/
b)解压下载的文件,并定位到解压的文件夹 c)用你自己的文件名运行这个程序:英特尔ab c: \ \ xxx.tar < br > " < / p >

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

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 .

前面提到的ShahidulAndroid-Studio方式(https://stackoverflow.com/a/44089388/1256697)也可以工作。对于那些在菜单中没有看到DeviceFile Explorer选项的人:请确保在Android Studio中打开/ Android - directory。 例如,react-native用户的项目文件夹中的内部与/ios-Directory处于同一级别

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

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

你有两个选择:

  1. 你可以根你的手机,这样你就可以查看你的隐藏 李db4文件< / > 这不是解决方案,而是一种变通办法。为什么不直接创建测试呢 使用'select'语句在其中显示数据库表的页面

简单的答案是NO。在即将到来的Android 13上,你不能访问任何东西 /存储/模拟/ 0 / Android / *

.

读取Android源页面这样的应用程序数据访问使用ADB在这里: https://developer.android.com/training/data-storage/manage-all-files < / p >