当前位置: 首页 > 科技观察

新版Glance发布,更好用的Android数据库调试助手

时间:2023-03-17 01:43:15 科技观察

本文转载自微信公众号“果林”,作者果林。转载本文请联系郭琳公众号。Glance是我开发的用于调试Android数据库的开源库。无需电脑、数据线,直接在手机上即可查看当前App中的数据库内容。Glance1.0版于去年12月推出。具体功能可以参考这篇文章。我开发了一个非常有用的开源库。但是,自第一个版本发布以来,Glance一直没有更新。主要是太忙了,业余时间只能写博客,而且有3个开源项目同时维护,能分配给Glance的时间实在是有限。不过,零碎写了8个多月的代码,Glance确实变得比以前更好了。虽然新增的一些特性可能看起来不是很重要,但是积累了很多之后,我觉得这已经足够发布一个新版本了。那么今天Glance1.1.0版本正式发布了,下面就带大家看看新版Glance有哪些新特性。/支持显示Room数据库/很多朋友在之前使用Glance的时候给我反馈,说有些数据库Glance无法显示,包括使用Room创建的数据库。出现这种情况的原因是Glance在查找数据库文件时,简单的使用了.db后缀作为判断标准。这种方法的优点是效率很高,但缺点也很明显,搜索结果不准确。因为有些数据库文件没有.db后缀,比如Room创建的数据库默认是没有后缀的。因此,在新版本的Glance中,我修改了搜索规则,不是简单的通过后缀名判断,而是真正判断文件是否是数据库文件。如果Android上的数据库文件是以二进制形式读取的,其文件头必须以“SQLiteformat3”开头,所以下面的代码可以准确判断一个文件是否为数据库文件:/***CheckthisfileisvalidSQLitedbfileornot.*/funFile.isValidDBFile()=try{valreader=FileReader(this)valbuffer=CharArray(16)reader.read(buffer,0,16)valstr=String(buffer)reader.close()str=="SQLiteformat3\u0000"}catch(e:Exception){e.printStackTrace()false}虽然对所有文件进行这样的判断势必会影响查找效率,但是Glance也有数据库文件的缓存机制。处理的结果会很快显示出来,可以弥补这方面的一些效率问题。/允许同时水平和垂直滚动/Glance查看数据库表格内容的界面还是比较精致的,如下图所示:这个界面是用一个水平的ScrollView和一个垂直的RecyclerView实现的,所以它同时支持水平和垂直方向滑动。但同时,我们只能横向或纵向滑动,不支持同时横向和纵向滑动。在这里感谢一下网友ultimateHandsomeBoy666,他给Glance提交了一个Pullrequest,让我们可以同时横向和纵向滑动查看数据。至于现实的原理也很简单:/***处理motioneventtoscroll,whilepassingtheeventdownwards*/overridefundispatchTouchEvent(ev:MotionEvent?):Boolean{onTouchEvent(ev)returnsuper.dispatchTouchEvent(ev)}/***donotintercepttoucheventsothatchilableviewcannonreceiveeventtouchfuridescInterroll(?):boolean=false表示在外层水平ScrollView中,我们不使用默认的onInterceptTouchEvent拦截机制,而是让它不拦截。那么在dispatchTouchEvent的时候,除了自己处理Touch事件,我们还要分发事件,让RecyclerView一起处理这个事件。最终效果如下图所示:/支持区分多个应用入口/Glance入口会在手机桌面创建一个Glance图标,点击该图标可以查看您的应用包含的数据库文件。然而,一个我没有想到的问题是,如果手机上安装了很多应用程序,而这些应用程序又引入了Glance库,就会导致你分不清每个Glance图标对应的是哪个应用程序。这个问题在我反应过来之前也被一位热心网友提出来了:可以看到桌面上有一堆Glance图标,不知道是哪个。当我第一次看到这个bug的时候,我还没有想好怎么修复它,因为当时我正忙着写另一个函数。没想到过了几天发现网友ultimateHandsomeBoy666又提出了一个Pullrequest来解决这个问题。ultimateHandsomeBoy666采用的解决方案是桌面Glance入口图标不再命名为Glance,而是与主App同名,但图标仍然保持Glance的风格,以区别于主App。这样无论有多少app引用Glance,都不会造成混淆。我觉得这个修改很合适,再次感谢ultimateHandsomeBoy666的帮助。/允许修改数据库内容/嗯,我这8个月的主要工作应该是在这个功能上。Glance之前的主要功能是帮助你找出当前应用程序包含的所有数据库并显示它们的内容。也就是说,只能看里面的数据。但是如果你想修改里面的数据,这是不行的。修改数据是一个非常好用的功能,长期以来也是很多朋友的心声。因此,Glance1.1.0版本最重要的功能之一就是允许开发者在手机端直接修改当前应用的数据库数据。至于修改数据的方法,也很简单,双击你要修改的那条数据即可,如下图所示:相信很多开发者朋友都需要这种便捷的可视化界面来修改数据.完全不需要电脑,手机上就可以搞定。另外,我想说的是,Glance显示数据库内容的功能是使用Paging3实现的,在写一篇讲解Paging3用法的文章时,很多朋友问我如何在Paging中修改数据3,这听起来像是一件很难完成的事情。由于当时确实没有尝试过修改数据的功能,所以无法回答这些朋友的问题。但是这次在Glance中实现了修改数据的功能之后,我发现Paging3在修改数据方面没有什么不可能或者难以理解的,这和平时使用RecyclerView修改数据的方法几乎是一样的。因此,如果以后有朋友在使用Paging3时修改数据有疑问,不妨参考一下Glance的源码实现。最后,使用Glance修改数据还有一个限制,就是表中必须有主键,否则无法修改。因为主键是一行数据的唯一约束,如果没有主键,Glance无法知道用户要修改哪一行数据。/如何升级/这里介绍新版Glance的内容变化。升级的方法非常简单。修改dependencies中的版本号即可:repositories{google()mavenCentral()}dependencies{debugImplementation'com.guolindev.glance:glance:1.1.0'}注意现在必须使用mavenCentral仓库,不能再使用j中心。至于原因,可以参考我的文章浅谈JCenter即将停止的事件。如果对Glance的源码感兴趣,可以访问Glance的项目主页:https://github.com/guolindev/Glance