如何访问Android设备中的数据/数据文件夹?
我正在开发一个应用程序,我知道我的数据库*.db
将出现在data/data/com.****.***
我可以从Eclipse中的AVD在sqlitepipe理器的帮助下访问这个文件
但是我不能在我的Android手机上访问这个文件。
我谷歌它说,我需要根植我的电话做到这一点,但我不想这样做。 (新手机,保修问题和安全问题)
所以这里是我的问题:我怎样才能访问我的Android手机中的data/data/.....
目录“ 没有根植它 ”?
我可以更改目录data/data.....
用户权限data/data.....
没有根植它?
在手机上直接访问文件很困难,但您可以将它们复制到您的计算机上,在那里您可以随心所欲地执行任何操作。 没有生根你有两个select:
-
如果应用程序是可debugging的,则可以在adb shell中使用
run-as
命令adb shell run-as com.your.packagename cp /data/data/com.your.packagename/
-
或者,您可以使用Android的备份function。
adb backup -noapk com.your.packagename
现在将提示您“解锁设备并确认备份操作”。 最好不要提供密码,否则读取数据变得更加困难。 只需点击“备份我的数据”。 计算机上产生的“backup.ab”文件包含所有android备份格式的应用程序数据。 基本上它是一个压缩的tar文件。 本页说明如何使用OpenSSL的zlib命令来解压缩它。 您可以使用
adb restore backup.db
命令来恢复备份。
您也可以尝试使用根资源pipe理器应用程序获取数据库。 如果这不起作用,那么你可以试试这个:
- 打开cmd
- 更改您的目录并进入“平台工具”
- input'
adb shell
' -
su
- 按设备上的“允许”
-
chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
- 在Eclipse中打开DDMS视图,从那里打开“FileExplorer”来获得你想要的文件
在此之后,您应该能够浏览设备上的文件。
要做到上述任何一项(即从您的手机本身访问受保护的文件夹),您仍然需要root权限。 (这包括更改/ data文件夹中的mount-permissions并访问它)
没有root权限,直接访问/data
, 除了从应用程序中通过代码直接读取是不可能的。 因此,您可以尝试将该文件复制到SD卡或某处访问,然后,您应该能够正常访问它。
如果您有开发人员设备,则生根不会使保修失效。 对不起,AFAIK没有其他办法。
- 打开你的命令提示符
- 将目录更改为E:\ Android \ adt-bundle-windows-x86_64-20140702 \ adt-bundle-windows-x86_64-20140702 \ sdk \ platform-tools
- input下面的命令
-
adb -d shell
-
run-as com.your.packagename cat databases/database.db > /sdcard/database.db
- 将目录更改为
cd /sdcard
以确保database.db
在那里。 -
adb pull /sdcard/database.db
或简单地你可以从设备复制database.db。
最简单的方法(只需一个简单的步骤)就可以使用以下命令/data/data/package.name/databases/file
的Android 5.0+设备上的可debugging应用程序文件夹(比如/data/data/package.name/databases/file
)中提取文件:
adb exec-out run-as package.name cat databases/file > file
在eclipse中使用文件资源pipe理器。 selectWindows =>显示视图=>其他… =>文件资源pipe理器。
另一种方法是通过adb文件拖动:
adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard
如果您使用Android Studio 3.0或更高版本,请按照下列步骤操作。
- 单击查看 > 工具窗口 > 设备文件资源pipe理器 。
- 展开/ data / data / [package-name]节点。
您只能在非根设备上扩展以debugging模式运行的软件包。
在根植设备上,正确的解决scheme是:
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
原来的解决scheme工作,但chmod将返回未知的目录。 将chmod命令更改为/ data / data / *可以访问Intellij中DDMS数据目录中的所有子文件夹。 我假设Eclipse DDMS的解决scheme是相同的。
更新所以,我发现是奇怪的。 我在IntelliJ(Android设备监视器)中使用DDMS运行Nexus 6。 我已经build立了一个小启动应用程序。 所述应用程序将数据保存到data / data / com.example.myapp / files中的.csv文件
当我第一次尝试访问我的Nexus 6上的这个文件,我发现我必须根设备..我可以看到数据文件夹,但试图打开它不会工作。 正如其他地方在网上提到的,扩展+会消失,然后不久再出现(请注意,有networking上的解决scheme,声称允许访问这些文件夹没有生根,我没有发现他们,为时已晚,我不知道是否我更喜欢根不pipe((我宁愿能够手动执行,而不是依靠应用程序或命令提示符给我我的解决scheme)))。 我植根于我的6,并再次尝试DDMS。
在这一点上,它显示了我的数据文件夹,我可以展开文件夹,并看到COM。 目录,但我无法打开任何一个。 那是当我发现上述解决scheme。 最初的说明不适用于这部分:
chmod 777 /data /data/data /data/data/com.application.pacakage /data/data/com.application.pacakage/*
那是当我尝试我发布的解决scheme时:
chmod 777 /data /data/data /data/data/*
该解决scheme似乎工作,但只在某些文件夹。 我现在可以展开我的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 — – ..只是fyi)
我也有同样的问题一次。 除了adbshell或生根设备,没有办法直接访问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
其中一个简单的方法是在SD卡上创build数据库。 因为您无法访问您手机的内部存储器中的数据文件夹,除非您的手机是root用户。 那么为什么不简单地在SD卡上创build你的数据库。
而且,如果你愿意,你可以写一些文件复制代码,将现有的数据库文件(从内部存储器)复制到外部存储器而不需要任何根目录。
你可以将这个数据库文件复制到Eclipse的某个地方(例如:SD卡或PC),你可以使用sqlite来访问和更新这个数据库文件。
问题是:如何访问数据文件夹在Android设备?
如果Android设备是Bluestacks *根浏览器APK显示数据/数据/ ..
尝试从https://apkpure.com/root-browser/com.jrummy.root.browserfree下载根浏览器;
如果文件是一个文本文件,你需要点击“打开为”,“文本文件”,“打开为”,“RB文本编辑器”
从Android备份到桌面
打开命令行cmd并运行:adb backup -f C:\ Intel \ xxx.ab -noapk your.app.package 。 不要input密码,然后点击备份我的数据。 确保不要保存在驱动器C根目录下。 你可能会被拒绝。 这就是为什么我保存在C:\ Intel。
提取* .ab文件
- 去这里下载: https : //sourceforge.net/projects/adbextractor/
- 提取下载的文件并导航到您提取的文件夹。
- 用你自己的文件名运行: java -jar abe.jar unpack c:\ Intel \ xxx.ab c:\ Intel \ xxx.tar
可能要访问这个文件夹你需要pipe理权限。
所以你有两个select:
- 根源您的设备,并尝试访问此文件夹
- 使用模拟器
ps:如果您使用上述两个选项中的任何一个,则可以按照以下步骤访问此文件夹
打开DDMS透视图 – >你的设备 – >(从右侧窗口选项select文件浏览器)select包 – >数据 – >数据 – >包名称 – >文件
从那里你可以拉起你的文件