我又开发了一个非常好用的开源库,调试 Android 数据库有救了
另外也有一些朋友可能会借助一些第三方的工具,比如说 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 感兴趣的朋友可以参考参考这部分的源码。
到这里为止,我们就可以非常方便地随时查看当前应用程序数据库中的数据了。相比于之前还要想办法导出数据库文件,发送到电脑上,再借助第三方工具进行查看,是不是简单了千百倍?
评论