其实做了 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 才能查看。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
结尾
最后小编想说:不论以后选择什么方向发展,目前重要的是把Android方面的技术学好,毕竟其实对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!
当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。
想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。
当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。
高级UI,自定义View
UI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。
不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
242265)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!