当前位置:首页 > 问答 > 正文

android数据库到底藏哪儿了,存储位置和创建路径那些事儿

关于Android数据库到底藏在哪里,以及它的创建路径,这事儿得从Android系统一个核心的设计理念说起,那就是“应用沙盒”,你可以把每个安装在手机上的App想象成住在同一个小区(你的手机)里的一户户人家,每一家都有自己独立的院子(这就是沙盒),院子有高高的围墙,自家人可以随便在院子里活动,但绝不能未经允许跑到邻居家院子里去,邻居也同样进不来你家,这个“院子”的地址,在Android系统里就是一个专门的目录。

这个目录的路径通常是这样的:/data/data/<应用程序的包名>/

这里的“应用程序的包名”是每个App独一无二的身份证,比如微信的包名是com.tencent.mm,淘宝的包名是com.taobao.taobao,微信的“私家院子”完整路径就是/data/data/com.tencent.mm/

数据库文件具体在这个院子的哪个角落呢?绝大多数情况下,它们就放在这个目录下的 databases 文件夹里,一个典型的数据信完整路径看起来是这样的:/data/data/com.tencent.mm/databases/一个具体的数据库文件.db

这个.db文件就是实际的数据库文件了,它可能是一个,也可能是多个,这取决于App的设计,一个App可能用一个数据库文件存储用户信息,另一个文件存储聊天记录。

你可能会想:我用自己的手机文件管理器去找这个路径,怎么根本找不到/data/目录呢?这就是沙盒机制的另一个关键点了:默认情况下,没有root权限的普通用户和应用,是无法访问其他应用的沙盒目录的,甚至连看都看不到。 这是Android系统为了保护每个App的隐私和数据安全设定的严格规定,在你没有对手机进行“root”(也就是获取最高管理员权限)之前,你是无法像浏览相册或下载文件夹那样,直接看到和操作这些数据库文件的。

android数据库到底藏哪儿了,存储位置和创建路径那些事儿

作为开发者或者想要查看数据的进阶用户,我们怎么进去这个“院子”看看呢?主要有以下几种途径,这些信息通常来自Android开发者官方文档或常见的技术实践:

如果你是开发者,在调试自己的App时: 最方便的方法是使用Android Studio里面一个叫Device File Explorer的工具,当你的手机通过USB连接电脑并开启了“开发者选项”中的“USB调试”后,你就能在这个工具里清晰地看到你正在调试的App的沙盒目录,包括databases文件夹,可以直接把里面的.db文件下载到电脑上,用专门的数据库查看软件(比如DB Browser for SQLite)打开分析。

如果你不是开发者,但想查看特定App的数据: 这比较困难,因为需要root权限,一旦手机root了,你就可以使用像Root Explorer这类需要root权限的文件管理器,直接进入/data/data/目录,找到你想看的App包名,进去就能看到databases文件了,但root手机会带来安全风险,并且会使某些金融类App无法正常运行,所以普通用户非常不推荐这么做。

android数据库到底藏哪儿了,存储位置和创建路径那些事儿

通过ADB命令(无需root,但需开启USB调试): 即使不root,在开启了“开发者选项”和“USB调试”的情况下,你可以使用Android Debug Bridge (ADB) 工具通过电脑命令行来访问,你可以用adb shell命令进入手机的命令行界面,然后通过run-as <包名>命令来“变身”成那个App的用户,这样你就有权限进入它的沙盒目录了,之后再用cd databasesls等命令,就能列出数据库文件,这是一种在不root的情况下“合法”进入自家院子后门的方法。

除了这个最核心的、受保护的存储位置,数据库还有可能放在另外两个地方,但情况比较特殊:

一个是“外部存储”。 也就是我们常说的手机内部存储(不是SD卡)的公共区域,比如/storage/emulated/0/(也就是你手机文件管理器里看到的根目录),App也可以在这里创建数据库,路径可能像Android/data/<包名>/files/databases/,但把数据库放在这里相对少见,因为这里的文件隐私性较差,其他有存储权限的App理论上可以读到(尽管新版Android也加强了限制),通常只有需要让用户方便地备份、或者需要与其他App共享数据时,才会考虑放在这里。

另一个是SD卡。 现在很多手机都不支持外置SD卡了,即使支持,由于SD卡可能被随意拔出,稳定性和安全性都没保障,所以几乎没有App会把核心数据库放在SD卡上。

Android数据库的“老巢”十有八九就在那个神秘的/data/data/<包名>/databases/目录下,它被牢牢地锁在应用的“私家院子”里,普通用户看不见也摸不着,这是Android保护我们数据安全的重要方式,想要一探究竟,对于开发者有方便的调试工具,对于普通用户则门槛很高,需要借助ADB或root等手段。