我又开发了一个非常好用的开源库,调试Android数据库有救了

其实做了 Android 开发这么多年,一直以来都有一个我认为非常不人性化的地方,就是开发人员没有办法简单直接地查看当前应用程序中的数据库文件,这个问题导致 Android 数据库的开发与调试工作一直都比较困难。

举个例子,我们编写了一段代码去查询数据库当中的某条数据,但是却没能查出来。那么到底是因为查询语句写错了?还是因为这条数据根本就不存在?要如何定位及解决这种问题是比较头疼的,因为我们无法直观地看到当前数据库中实际的数据。

那么过去大家都是如何解决的呢?

这个真的是八仙过海,各显神通了。像我个人比较习惯的方式是直接用 SQL 命令查看,借助 adb shell 进入控制台,然后使用 sqlite3 命令打开某个数据库文件,再接下来用传统的 SQL 语句就能查看该数据库当中的数据了。只可惜这种方式自 Android 7.0 之后被禁止使用,主要还是考虑数据的安全性问题吧。

另外也有一些朋友可能会借助一些第三方的工具,比如说 SQLite Expert。这种工具是在电脑上用来查看数据库文件的,因此需要先想办法将手机中的数据库文件导出到电脑上(这一步也并不容易,因为内置存储空间的文件很难导出),然后再用 SQLite Expert 打开该文件即可查看其中的数据。

不管使用哪种方式,看上去都不是一件简单的事情。有的时候我在开发过程中遇到一些数据库的问题,一想到要用这么繁琐的步骤才能查看到数据库当中的数据,我宁愿换一种解决问题的思路。

Google 在过去一直没有针对数据库调试这方面提供了一个简便的解决方案,这是我认为非常不人性化的一点。

好消息是,最新的 Android Studio 4.1 当中终于内置了 Database Inspector 这个工具,在很大程度上解决了数据库调试困难的问题。并且我认为,Google 早就应该提供这个工具了。

而我新开发的这个开源项目同样也是为了解决这个问题。

最开始想到去做这样一个开源项目,主要是受到 LeakCanary 的启发。LeakCanary 相信很多朋友都用过,我们只需要将 LeakCanary 的库集成到项目当中,LeakCanary 就能自动检测当前项目的内存泄漏情况,并通过可视化的界面将内存泄漏问题展示给开发者。

然后我就想到,我是不是也可以开发一个开源库,当任何项目集成了这个开源库后,就自动扫描当前项目的内置和外置存储空间,把所有的数据库文件都扫描出来,然后同样提供一个可视化的界面以方便开发者随时查看数据库中的数据。

有了这个库,当我们在开发过程中再次遇到数据库问题时,直接通过可视化界面查看一下数据库当中真实的数据是什么样的,哪里出了问题就一目了然了。

虽然听上去和 Database Inspector 的功能有点重叠,但其实它们的目标场景是完全不同的。Database Inspector 需要手机连到电脑上,然后在 Android Studio 里查看数据库当中的数据。而我开发的这个开源库不需要连接电脑,只需在手机上即可查看(有点类似于 Profiler 和 LeakCanary 之间的关系)。

我给这个开源库起名为:Glance,意为一瞥的意思。我希望能让开发者们通过快速一瞥即可定位开发当中遇到的数据库问题,所以起了这样一个名字。

确定了项目名和设计思路之后,接下来我就开始动手开发了。事实上,Glance 的开发过程一路都比较顺利,可能主要是因为之前开发过 LitePal,所以在数据库方面积累了很多经验。

并且,我对 Glance 的定位不仅仅只是一个协助查看数据库内容的工具,同时也是一个非常好的学习项目。在编写 Glance 的时候,我特意使用了许多 Google 目前最推荐使用的各项新技术,包括 Kotlin、协程、Paging3、App Startup、MVVM 等等等等,基本都是按照最标准的项目开发规范去实现的。所以,学习这个项目的源码相信也会对你的开发水平有非常大的帮助。

我大概是从 8 月中旬的时候开始着手编写的这个项目,到 11 月份的时候基本就将所有主要的功能都开发完成了。期间还进行了一轮小范围的内部测试,几位热心群友帮我发现了好几个颇为严重的 bug,我又对此一一进行了修复。

那么现在,我认为这可以算是一个相对比较稳定的版本了。但是由于毕竟是全新的开源库,我还不敢直接发布 1.0.0 版本,因此这次发布的是 1.0.0-alpha01 版本。大家如果在使用的过程中发现了任何问题,很正常,反馈给我即可,我会尽快进行修复。

好了,接下来就向大家介绍 Glance 的具体用法吧。其实真的非常非常简单,只需要使用如下语句将 Glance 引入到你的项目当中:

dependencies {
debugImplementation ‘com.glance.guolindev:glance:1.0.0-alpha01’
}

然后就结束了。

没错,就是这么简单,Glance 没有提供任何对外的 API,所以也不需要你进行什么代码对接操作,只要将依赖库引入到你的项目当中,就算是对接完成了。

注意上述的引用语句中我们使用的关键字是 debugImplementation,这个关键字相信大家用的比较少,通常我们使用的都是 implementation 关键字。那么 debugImplementation 是什么意思呢?它表示只有在你的项目是 debug 版的时候,才会将 Glance 引入到你的项目当中,而 release 版是不会包含 Glance 库的。

这是一种最为安全的做法,因为如果 release 版中引入了 Glance 库,相当于给你的应用程序留了个后门,是有可能引起数据库安全问题的。

接下来就像平常那样运行你的程序就可以了,你会发现,你的手机桌面上将会多出一个 Glance 的图片,如下图所示。

这个图标就是引入了 Glance 库之后自动生成的,点击该图标即可打开 Glance 的可视化界面,如下图所示。

在这里,Glance 会自动开始扫描当前应用程序的内置和外置存储空间,将所有的数据库文档全部搜索到,并一一列出。

比如上图中的 demo1.db 就是我当前项目工程中的一个数据库文件,internal storage 表示它是存放在内置存储空间下的。

点击 demo1.db,即可打开这个数据库文件,并将该数据库中的所有表罗列出来,如下图所示。

当然这里列出的表并不全部都是由我们自己创建的,比如 android_metadata、sqlite_sequence 这些表就是自动生成的。但 Glance 并不会对此进行区分,而是会把它们全部罗列出来。

接下来点击 magazine 表,我们即可查看表中的数据。横向滚动可以查看所有的列,纵向滚动可以查看所有的行,如下图所示。

这里对表中的数据进行加载使用了分页技术,所以即使你的表中有上百万条数据,也会非常快速地加载出来。而 Glance 的分页技术是使用 Paging3 实现的,对 Paging3 感兴趣的朋友可以参考参考这部分的源码。

到这里为止,我们就可以非常方便地随时查看当前应用程序数据库中的数据了。相比于之前还要想办法导出数据库文件,发送到电脑上,再借助第三方工具进行查看,是不是简单了千百倍?

即使相比于 Database Inspector,我认为 Glance 也是有很大优势的,毕竟你不需要借助电脑,也不需要打开 Android Studio 才能查看。

结尾

最后,针对上面谈的内容,给大家推荐一个Android资料,应该对大家有用。

首先是一个知识清单:(对于现在的Android及移动互联网来说,我们需要掌握的技术)

泛型原理丶反射原理丶Java虚拟机原理丶线程池原理丶
注解原理丶注解原理丶序列化
Activity知识体系(Activity的生命周期丶Activity的任务栈丶Activity的启动模式丶View源码丶Fragment内核相关丶service原理等)
代码框架结构优化(数据结构丶排序算法丶设计模式)
APP性能优化(用户体验优化丶适配丶代码调优)
热修复丶热升级丶Hook技术丶IOC架构设计
NDK(c编程丶C++丶JNI丶LINUX)
如何提高开发效率?
MVC丶MVP丶MVVM
微信小程序
Hybrid
Flutter

接下来是资料清单:(敲黑板!!!


1.数据结构和算法

2.设计模式

3.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记

4.面试专题资料包(怎么能少了一份全面的面试题总结呢~)

不论遇到什么困难,都不应该成为我们放弃的理由!共勉~

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
链图片转存中…(img-J1XsHqyq-1715308400282)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值