我正在开发一个应用程序,我知道我的数据库 *.db
将出现在 data/data/com.****.***
我可以在 sqlite manager 的帮助下从 Eclipse 中的 AVD 访问这个文件
但我无法在我的 Android 手机中访问此文件。我用谷歌搜索它,它说我需要root我的手机才能做到这一点,但我不想这样做。
如何在我的 Android 手机中访问我的 data/data/.....
目录“无需 root ”?
我可以更改目录 data/data.....
的用户权限而不使用它吗?
直接在手机上访问文件很困难,但您可以将它们复制到您的计算机上,在那里您可以做任何您想做的事情。如果不生根,您有两种选择:
如果应用程序是可调试的,您可以使用 adb shell 中的 run-as 命令 adb shell run-as com.your.packagename cp /data/data/com.your.packagename/ 或者您可以使用 Android 的备份功能。 adb backup -noapk com.your.packagename 现在将提示您“解锁您的设备并确认备份操作”。最好不要提供密码,否则读取数据变得更加困难。只需单击“备份我的数据”。您计算机上生成的“backup.ab”文件包含 android 备份格式的所有应用程序数据。基本上它是一个压缩的 tar 文件。本页解释了如何使用 OpenSSL 的 zlib 命令解压缩它。您可以使用 adb restore backup.db 命令恢复备份。
如果您使用的是 Android Studio 3.0 或更高版本,请按照以下步骤操作。
单击视图 > 工具窗口 > 设备文件资源管理器。展开 /data/data/[package-name] 节点。
您只能扩展在非 root 设备上以调试模式运行的软件包。
https://i.stack.imgur.com/OMdpq.jpg
您也可以尝试使用根资源管理器应用程序获取数据库。如果这不起作用,那么你可以试试这个:
打开 cmd 更改目录并进入“平台工具”类型“adb shell”su 在设备上按“允许” chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application .package/* 在 Eclipse 中打开 DDMS 视图,然后从那里打开“FileExplorer”以获取您想要的文件
在此之后,您应该能够浏览根设备上的文件。
要执行上述任何操作(即从手机本身访问受保护的文件夹),您仍然需要 root。 (这包括更改 /data 文件夹的挂载权限并访问它)
如果没有 root,则无法通过代码直接访问 /data
以读取 您的 应用程序中的除外。因此,您可以尝试将该文件复制到 sdcard 或可访问的地方,然后,您应该能够正常访问它。
如果您拥有开发人员设备,则生根不会使您的保修失效。对不起,AFAIK 没有其他方法。
adb pull
,如下面的答案中所述。
在无根的 Android 5.0+ 设备上从可调试应用程序文件夹(比如说 /data/data/package.name/databases/file
)中提取文件的最简单方法(只需一个简单步骤)是使用以下命令:
adb exec-out run-as package.name cat databases/file > file
打开命令提示符 将目录更改为 E:\Android\adt-bundle-windows-x86_64-20140702\adt-bundle-windows-x86_64-20140702\sdk\platform-tools 输入以下命令 adb -d shell run-as com.your .packagename cat databases/database.db > /sdcard/database.db 将目录更改为 cd /sdcard 以确保 database.db 在那里。 adb pull /sdcard/database.db 或者你可以从 device 复制 database.db 。
在 Eclipse 中使用文件资源管理器。选择 Windows => 显示视图 => 其他 ... => 文件资源管理器。
另一种方法是通过 adb 拉取文件:
adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard
从 Android 备份到桌面
打开命令行 cmd 并运行:adb backup -f C:\Intel\xxx.ab -noapk your.app.package。不要输入密码,然后单击备份我的数据。确保不要保存在驱动器 C 根目录上。你可能会被拒绝。这就是我保存在 C:\Intel 上的原因。
提取 *.ab 文件
去这里下载:https://sourceforge.net/projects/adbextractor/ 提取下载的文件并导航到您提取的文件夹。使用您自己的文件名运行它: java -jar abe.jar unpack c:\Intel\xxx.ab c:\Intel\xxx.tar
我曾经也遇到过同样的问题。除了 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
在有根设备上,正确的解决方案是:
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--- - .. 仅供参考)
可能是要访问这个文件夹你需要管理权限。
所以你有两个选择: -
根您的设备,然后尝试使用模拟器访问此文件夹
ps:如果您使用以上两个选项中的任何一个,您可以按照以下步骤访问此文件夹
打开 DDMS 透视图 -> 您的设备 ->(从右侧窗口选项中选择文件资源管理器)选择包 -> 数据 -> 数据 -> 包名称 -> 文件
从那里你可以提取你的文件
您可以像这样下载一个文件:
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 方式Shahidul
(https://stackoverflow.com/a/44089388/1256697) 也可以使用。对于那些在菜单中没有看到 DeviceFile Explorer
选项的用户:请务必在 Android Studio 中打开 /android-Directory。例如,react-native 用户在其 Project-Folder 的 inside 中与 /ios-Directory 处于同一级别。
adb backup
对我不起作用,所以我做了以下操作(小米红米 Note 4X,Android 6.0):
1. 转到 设置 >附加设置 >备份与重置>本地备份。
2. 点击屏幕底部的“备份”。
3. 取消选中“系统”和“应用”复选标记。
4. 点击屏幕上的详细信息披露按钮在“应用程序”单元格右侧导航到应用程序选择屏幕。
5. 选择所需的应用程序并点击确定。
6. 备份完成后,需要以某种方式找到实际文件。我的可以在 /MIUI/backup/AllBackup/_FOLDER_NAMED_AFTER_BACKUP_CREATION_DATE_ 找到。
7. 然后我按照 this answer 到 RonTLV 的步骤实际转换了备份文件(我的案例)到 tar(从原始答案复制):
"
a) 转到此处下载:https://sourceforge.net/projects/adbextractor/
b) 解压缩下载的文件并导航到您解压缩的文件夹。
c ) 使用您自己的文件名运行它: java -jar abe.jar unpack c:\Intel\xxx.ab c:\Intel\xxx.tar
"
一种简单的方法是在 SD 卡上创建数据库。因为您无法访问手机内部存储器中的数据文件夹,除非您对手机进行 root。那么为什么不简单地在 SD 卡上创建您的数据库。
此外,如果您愿意,您可以编写一些文件复制代码来将现有的数据库文件(从内部存储器)复制到外部存储器,而无需任何根。
File
路径即可
简单的答案是否定的。在即将推出的 Android 13 上,如果没有 Root 设备或连接到 PC,您将无法访问 /storage/emulated/0/Android/* 目录中的任何内容,当然在 Pixel 设备中也不行。
在此处阅读 Android 源页面以了解使用 ADB 进行此类应用数据访问:https://developer.android.com/training/data-storage/manage-all-files
您可以将此 db 文件复制到 eclipse explorer 中的某个位置(例如:sdcard 或 PC),您可以使用 sqlite 访问和更新此 db 文件。
您也可以尝试将文件复制到 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" />
SQLlite 数据库存储在用户的手机上,它隐藏在路径下:
/Data/Data/com.companyname.AppName/File/
你有两个选择:
您可以根您的手机,以便您可以访问查看隐藏的 db3 文件,这不是解决方案,而是解决方法。为什么不使用“选择”语句创建显示数据库表的测试页面。
问题是:如何在 Android 设备中访问数据数据文件夹?
如果 android-device 是 Bluestacks * Root Browser APK 显示 data/data/..
尝试从 https://apkpure.com/root-browser/com.jrummy.root.browserfree 下载根浏览器
如果文件是文本文件,您需要点击“打开为”、“文本文件”、“打开为”、“RB 文本编辑器”
不定期副业成功案例分享
adb backup -f \location\on\local\drive -noapk app.package.name
在没有 root 的情况下为我工作dd if=backup.ab bs=24 skip=1|openssl zlib -d > backup.tar
adb backup -noapk com.your.packagename
会将 ab 文件保存在 当前目录 中,因此请确保您已导航到正确的目录(例如cd Desktop..
)android:allowBackup="false"
禁用备份,则备份方法将产生一个空备份。