我正在开发一个应用程序,我知道我的数据库*.db将出现在data/data/com.****.***中。
我可以在sqlite管理器的帮助下从Eclipse中的AVD访问此文件,但是我无法在Android手机中访问此文件。
我用它搜索了一下,它说我需要把手机打根,但我不想这么做。
如何“不带根”访问我Android手机中的data/data/.....目录? ?
是否可以更改目录data/data.....的用户权限而无需将其植根?

评论

您是否有database.db文件.. ???

我正在使用数据库-“ openOrCreateDatabase(....)”

您肯定首先需要扎根手机。然后,您将需要一个可以使用的胜任的文件管理器应用程序。 ASTRO文件管理器很流行,但是它没有root访问支持,因此对高级用户没有用。您应该能够使用ES File Explorer或File Expert。我最近在使用ES File Explorer查看/ data / data或其他受保护的文件夹时遇到了问题,并且几乎放弃了它,我现在正在使用File Expert。它们都要求您进入设置并启用root资源管理器选项(有时还将文件系统挂载为可写)。所以你需要先做。

这不是与编程相关的问题或答案。

stackoverflow.com/a/18472135/1778421

#1 楼

直接在手机上访问文件很困难,但是您可以将它们复制到计算机上,在其中可以执行任何操作。
不生根,您有2个选择:



如果应用程序可调试,则可以在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命令来还原备份。



评论


adb backup -f \ location \ on \ local \ drive -noapk app.package.name对我有效,没有root

– Theblang
2013年12月4日16:28



使用以下命令解压缩备份文件:dd if = backup.ab bs = 24 skip = 1 | openssl zlib -d> backup.tar

–人
2014年3月17日在18:27



在选项1中,如何告诉cp命令将其保存到笔记本电脑(Mac)?如果您举一个Win示例,我也想知道,将其翻译出来。谢谢。

–杰拉德
2014年9月3日在4:20

重要提示:运行adb backup -noapk com.your.packagename会将ab文件保存在当前目录中,因此请确保您已在正确的目录中导航(例如cd Desktop。

–Menelaos Kotsollaris
2015年5月20日15:12

请注意,如果您的应用通过清单中的android:allowBackup =“ false”禁用了备份,则备份方法将产生一个空备份。

–汤姆
19年5月1日在1:24

#2 楼

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


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

您只能扩展在无根设备上以调试模式运行的程序包。



评论


我在这个码头上看不到任何东西。说我没事你知道是什么问题吗?

–马赫迪·阿扎德巴(Mahdi Azadbar)
17年6月25日在8:34

这仅适用于调试模式,不适用于发行版本

–行程
17年8月2日在8:35

感谢您展示无文件访问文件系统的方式!

–镜头光晕
18年2月20日在17:03

这太棒了。希望我早就知道这一点。

–checkmate711
18/09/12在18:40

对于那些想知道的人,路径通常是这样的:/data/user/0/[package.name]

– SmartyP
18/12/24在10:47

#3 楼

您也可以尝试使用root资源管理器应用程序获取数据库。如果这不起作用,则可以尝试以下操作:


打开cmd
更改目录并进入“平台工具”
键入'adb shell'
su
在设备上按“允许”
chmod 777 /data /data/data /data/data/com.application.package /data/data/com.application.package/*
在Eclipse中打开DDMS视图,然后从其中打开“ FileExplorer”以获取所需的文件

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

评论


我认为Root Explorer应用程式仅适用于植根电话。我会尝试第二种方法

–Naveen Prince P
2012年10月22日在16:40

无法chmod / data:不允许操作

– bofredo
13年8月22日在15:47

@bofredo我认为这是因为您的手机未扎根。你应该扎根手机,然后尝试这个

– Sheraz Ahmad Khilji
2014年2月3日下午6:42

@mahemadhi是的,您可能必须为每个目录手动运行此命令,因为所有目录都具有对其专有的权限。

– Sheraz Ahmad Khilji
2014年3月24日在6:44

@VivekChavda是的,他们需要扎根电话

– Sheraz Ahmad Khilji
18年5月2日在15:53

#4 楼

要执行上述任何操作(即从手机内部访问受保护的文件夹),您仍然需要root用户。 (这包括更改/ data文件夹上的安装权限并对其进行访问)。

没有root用户,除非通过代码从应用程序内部访问,否则无法直接访问/data以进行读取。因此,您可以尝试将该文件复制到sdcard或可访问的某个位置,然后,您应该可以正常访问它。

如果您使用的是开发人员设备,则根目录不会使您的保修无效。抱歉,AFAIK没有其他方法。

评论


我没有使用开发者设备。我的是Xperia U

–Naveen Prince P
2012年10月22日在16:29

如何使用chmod命令编辑数据文件夹的用户权限?

–Naveen Prince Pbr /> 2012年10月22日在16:37

整个分区安装为只读。我想您最好的选择是以下答案中提到的adb pull。

–阿尼鲁(Anirudh Ramanathan)
2012年10月22日16:39

如果应用程序允许,我是可能的。目录对每个人都有x权限(但对每个人都没有r,因此您必须知道路径)。它取决于应用程序是否使文件世界可访问。有些文件是,大多数不是。

– Jan Hudec
13-10-4在9:08

首先,您说无法读取,然后建议将文件复制到其他位置。但是,如何在不首先读取文件的情况下复制文件?我认为这个答案是越野车。

–直到
2015年6月10日12:57

#5 楼

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

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


#6 楼


打开命令提示符
将目录更改为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或直接从设备复制database.db。


评论


对我来说很完美。谢谢!但是在我的情况下,数据库文件名没有.db扩展名。

– technik
17年4月17日在17:53

#7 楼

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

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

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


#8 楼

我曾经也遇到过同样的问题。除了adb shell或rooting device,无法在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

#9 楼

要将其从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解压缩c:\ Intel \ xxx.ab c:\ Intel \ xxx.tar



评论


这是一个很好的答案,谢谢。为我工作,以提取在小米设备(扩展名为.bak)上创建的单应用程序备份。无需生根

–俄语
18-6-5 '23:16



#10 楼

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

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的解决方案相同。

UPDATE
因此,我发现的发现很奇怪。我正在IntelliJ(Android设备监视器)中使用DDMS运行Nexus 6。我建立了一个小启动程序。该应用程序将数据保存到data / data / com.example.myapp / files

中的.csv文件中。当我第一次尝试在Nexus 6上访问该文件时,我发现必须根设备。。我可以看到数据文件夹,但尝试打开它不起作用。正如在其他地方在线所提到的,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文件夹,但不能扩展其中的文件目录。

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

chmod 777 /data /data/data /data/data/com.example.myapp/*


其次:

chmod 777 /data /data/data /data/data/com.example.myapp/files


这些命令使我可以扩展和查看应用目录中的文件,以确认.csv是否已正确保存。

希望对您有所帮助。我为此奋斗了几个小时!

(为了进一步解决这个问题,奇怪的是,权限没有传递给传递到files目录的.csv文件。我的文件目录权限读为drwxrwxrwx和我的log.csv文件权限为-rw-rw ---- ..只是fyi)

#11 楼

您可以下载一个类似的文件:

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 Studio Shahidul(https://stackoverflow.com/a/44089388/1256697)工作。对于那些没有在菜单中看到DeviceFile Explorer选项的用户:确保在Android Studio中打开/ android-Directory。
例如react-native用户将其放在与/ ios-Directory相同级别的Project-Folder中。

#12 楼

可能是您需要管理权限才能访问此文件夹。

,因此您有两个选择:-


根设备,然后尝试访问此文件夹
使用模拟器

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


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


,然后可以在其中提取文件

评论


我使用MEmu Android Emulator。

–索哈伊·艾哈迈德(Sohail Ahmed)
20年8月12日在10:30



#13 楼

一种简单的方法是在SD卡上创建数据库。因为除非您为手机建立根目录,否则您将无法访问手机内存中的数据文件夹。因此,为什么不简单地在SD卡上创建数据库。

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

评论


怎么做?如何在SD卡中创建数据库

–Naveen Prince P
2012年10月22日在16:41

此方法将帮助您在SD卡上创建数据库。只需提供一个指向SD卡的File路径,您就可以开始了

– Waqaslam
2012年10月22日在21:22



#14 楼

adb backup对我不起作用,所以这就是我所做的(小米Redmi 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


#15 楼

您可以将此数据库文件复制到Eclipse Explorer中的某个位置(例如:sdcard或PC),然后可以使用sqlite访问和更新此数据库文件。

#16 楼

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


如果android设备是Bluestacks
*

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


如果文件是文本文件,则需要单击“打开为”,“文本文件”,“打开为”,“ RB文本”编辑器”

#17 楼

您也可以尝试将文件复制到SD卡文件夹(这是一个公用文件夹),然后可以将文件复制到PC上,然后使用sqlite对其进行访问。

这是一些代码可用于将文件从数据/数据复制到公共存储文件夹:

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" />


评论


如果文件不与他人共享读取权限,则无法访问复制文件的所有操作

– Steve Luck
18 Mar 19 '18在9:11



#18 楼

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

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


您在此处有2个选项:


您可以为手机设置根目录,以便您可以查看隐藏文件。
db3文件
这不是解决方案,而是一种解决方法。为什么不创建使用“选择”语句在其中显示您的数据库表的测试页面。