我正在开发一个应用程序,我知道我的数据库*.db将出现在data/data/com.****.***中
*.db
data/data/com.****.***
我可以在sqlite管理器的帮助下从Eclipse中的AVD访问这个文件
如何访问我的Android手机中的data/data/.....目录"没有生根"
data/data/.....
我可以在不根目录的情况下更改目录data/data.....的用户权限吗?
data/data.....
要做到以上任何一项(即从手机本身访问受保护的文件夹),你仍然需要root。(这包括更改/data文件夹的挂载权限并访问它)
没有根,直接访问/data通过代码读取除了在你的应用程序是不可能的。所以你可以试着把那个文件复制到sdcard或者其他可以访问的地方,然后,你就可以正常访问它了。
/data
如果您使用的是开发人员设备,那么root不会使您的保修失效。对不起,我没有别的办法了。
使用eclipse中的文件资源管理器。Select Windows => Show View => Other…>文件资源管理器。
另一种方法是通过adb提取文件:
adb pull /system/data/data/<yourpackagename>/databases/<databasename> /sdcard
其中一个简单的方法是在sd卡上创建数据库。因为你无法访问手机内存中的数据文件夹,除非你对手机进行root操作。那么为什么不简单地在sd卡上创建数据库呢?
此外,如果您愿意,可以编写一些文件复制代码,将现有的数据库文件(从内部内存)复制到外部内存,而不需要任何根。
你也可以尝试使用根资源管理器应用程序获取db。如果这不起作用,那么你可以试试这个:
adb shell
su
chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
在此之后,您应该能够浏览根设备上的文件。
你可以复制这个db文件到eclipse资源管理器的某个地方(例如:sdcard或PC),你可以使用sqlite访问和更新这个db文件。
run-as
adb shell run-as com.your.packagename cp /data/data/com.your.packagename/
Alternatively you can use Android's backup function.
adb backup -noapk com.your.packagename
现在将提示您“解锁您的设备并确认备份操作”。最好不要提供密码,否则读取数据会变得更加困难。只需点击“备份我的数据”。生成的“备份”。Ab '文件在您的计算机上包含所有应用程序数据在android备份格式。基本上它是一个压缩的tar文件。这个页面解释了如何使用OpenSSL的zlib命令来解压它。 可以使用adb restore backup.db命令恢复备份。李< / p > < / >
adb restore backup.db
可能要访问这个文件夹需要管理员权限。
所以你有两个选择:-
附注:如果您正在使用上述两个选项中的任何一个,您可以通过以下步骤访问此文件夹
打开DDMS透视图->您的设备->(选择文件资源管理器从 右窗口选项)选择package -> data -> data -> package name 文件- > < / p >
从那里你可以调出你的文件
adb -d shell
run-as com.your.packagename cat databases/database.db > /sdcard/database.db
cd /sdcard
database.db
adb pull /sdcard/database.db
在未根的Android 5.0+设备上从可调试应用程序文件夹(比如/data/data/package.name/databases/file)中提取文件最简单的方法(只是一个简单的步骤)是使用以下命令:
/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
当我第一次尝试在我的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---- ..仅供参考)
打开命令行cmd,执行以下命令: adb backup -f C:\Intel\xxx。ab -noapk your.app.package。 不输入密码,点击备份我的数据。 确保不要保存在C根盘上。你可能会被拒绝。 这就是为什么我保存在C:\Intel.
如果你使用的是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 backup
你可以像这样下载一个文件:
adb exec-out run-as debuggable.app.package.name cat files/file.mp4 > file.mp4
在你下载之前,你可能不想看看你的App-Directory中的文件结构。为此,执行以下步骤THelper上面注意到:
THelper
adb shell run-as com.your.packagename cd files ls -als .
前面提到的Shahidul的Android-Studio方式(https://stackoverflow.com/a/44089388/1256697)也可以工作。对于那些在菜单中没有看到DeviceFile Explorer选项的人:请确保在Android Studio中打开/ Android - directory。 例如,react-native用户的项目文件夹中的内部与/ios-Directory处于同一级别
Shahidul
DeviceFile Explorer
SQLlite数据库存储在用户的手机,它隐藏在路径下:
/Data/Data/com.companyname.AppName/File/
你有两个选择:
简单的答案是NO。在即将到来的Android 13上,你不能访问任何东西 /存储/模拟/ 0 / Android / *
读取Android源页面这样的应用程序数据访问使用ADB在这里: https://developer.android.com/training/data-storage/manage-all-files < / p >