Android 调试神器-Stetho(Facebook出品)的使用
前言
Chrome的Developer Tools对于WEB开发者来讲几乎是一个神器,而Chrome Store里也有无奇不有的插件,如果Chrome能调安卓应用应该是一件美好的事,而Facebook开源的一个工具Stetho让Chrome调试android 应用不再是一个梦。安卓在调试时,有时候需要查看数据库,SharePreference等,而这个前提是必须root,另一方面,andoird的网络方面的抓包调试显得很困难,而这一切,Stetho都为我们轻轻松松地解决。除了使用android集成环境里的工具查看view树,使用Stetho也可以做到。
加入依赖包
整个测试过程,我们需要用到数据库, SharePreference,以及Http请求,为了避免重复造轮子,我们引入几个第三方库。
- ActiveAndroid 一个android的orm,用于数据库操作
- LessCode 一个工具库,整个库使用jquery风格函数
- Okhttp 一个http请求库,配合stetho完成测试
开发环境使用android studio,对于ActiveAndroid,我们需要加入以下代码
repositories {mavenCentral()maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
}
compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'
而LessCode则加入
compile 'com.jayfeng.lesscode:lesscode-core:0.1.3'
再加入okhttp的依赖
compile 'com.squareup.okhttp:okhttp:2.3.0'
最后加入Stetho,由于是配合okhttp,所以还要加入Stetho-okhttp
compile 'com.facebook.stetho:stetho:1.1.0'
compile 'com.facebook.stetho:stetho-okhttp:1.1.0'
初始化配置
由于需要进行网络请求,所以加入请求网络的权限
<uses-permission android:name="android.permission.INTERNET" />
ActiveAndroid需要进行一些简单的配置操作才能操作数据库
在application节点下加入如下代码,主要是配置数据库名字,版本等信息,其中cn.edu.zafu.stethodemo.model.Person是一个实体类,该类继承com.activeandroid.Model,完成数据库操作
<meta-dataandroid:name="AA_DB_NAME"android:value="Stetho.db" />
<meta-dataandroid:name="AA_DB_VERSION"android:value="1" />
<meta-dataandroid:name="AA_MODELS"android:value="cn.edu.zafu.stethodemo.model.Person" />
新建一个App类,继承com.activeandroid.app.Application,重写onCreate方法,在里面完成Stetho的初始化工作。构建一个Builder并进行配置,最后初始化Stetho
Stetho.initialize(Stetho.newInitializerBuilder(this).enableDumpapp(Stetho.defaultDumperPluginsProvider(this)).enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this)).build());
布局
布局界面过于简单,不贴代码了,主要是三个按钮,一个用于网络请求,一个写入数据到数据库,一个写入数据到SharePreference,最终界面如图所示。
关键代码
数据库操作使用ActiveAndroid库显得特别简单,调用save方法即可保存
private void writeToSqlite() {Person person = new Person();person.setName("Jake");person.setAge(19);person.save();//保存ToastLess.$(this, "save to Sqlite successfully!");}
而SharePreference的操作则通过LessCode库写入,只需一句话
private void writeToSharedPreference() {SharedPreferenceLess.$put(getApplicationContext(), "name", "StethoDemo");//写入数据SharedPreferenceLess.$put(getApplicationContext(), "version", "v1.0.0");//写入数据ToastLess.$(this, "save to SharedPreference successfully!");//显示一个通知提示}
复杂点的代码在网络请求,但是okhttp已经为我们封装好了,直接调用就好了
private void getFromNetwork() {OkHttpClient client = new OkHttpClient();//下面这句话显得尤为重要,加入后才能拦截到http请求。client.networkInterceptors().add(new StethoInterceptor());//构建请求Request request = new Request.Builder().url("http://www.baidu.com").build();Response response = null;client.newCall(request).enqueue(new Callback() {@Overridepublic void onFailure(Request request, IOException e) {}@Overridepublic void onResponse(Response response) throws IOException {//此方法在子线程中,所以通过发送至handler处理String body = response.body().string();Message message = handler.obtainMessage();message.what=NETWORK;message.obj=body;handler.sendMessage(message);}});}
代码差不多就是这个样子了,剩下的就是如何进行调试了
使用Chrome调试
在我们运行完程序后,我们打开Chrome,在地址栏输入chrome://inspect/,我们会看到这样一个界面
我们点击图中的蓝色inspect即可进入调试界面,如果点击该链接后你打开的是一个空白页面,那么恭喜你,你已经被GFW拦截了,你不得不进行翻墙,翻墙方法自己研究,这里我使用的时VPN。
打开该链接后,我们选中Elements,呈现在眼前的是这样一个界面。
图片最左边是一棵当前界面的View树,当你选中一部分内容后,界面上对应的内容会高亮显示,如图右边的网络请求Button ,被一层蓝色遮罩,中间部分是当前选中的控件的一些属性。
现在我们切换至NetWork选项卡,然后点击模拟器中的第一个按钮,你会发现网络请求出现在了这个选项卡里,就像web调试一样。里面可以看到请求头信息,响应信息,Cookie等
我们切换至Resources选项卡,在这里,我们能对数据库,SharedPreference等进行查看,先来看下数据库中的信息,一开始应该是空的信息,当我们点击模拟器中的第三个按钮,点击两次后,数据库中应该会新增两条记录,如图所示
此外,我们还可以进行sql语句操作,如图所示
当我们点击模拟器中的第二个按钮,应该会增加SharedPreference信息,就像图中所示
对应这个SharedPreference,其实可以通过Dumpapp进行修改,这里先放一张截图效果,后文解释,图中打印了SharedPreference中值,进行修改后再次打印
由上面的一些功能看出,Stetho是如此强大,而这一切,无需手机Root,即使在没有root的真机上,这些信息也一览无余。
自定义dumpapp 插件
自定义插件是扩展dumpapp系统的首选方式,可以轻松地添加在配置。它的配置步骤是这样的:
Stetho.initialize(Stetho.newInitializerBuilder(context).enableDumpapp(new MyDumperPluginsProvider(context)).build())private static class MyDumperPluginsProviderimplements DumperPluginsProvider {public Iterable<DumperPlugin> get() {ArrayList<DumperPlugin> plugins = new ArrayList<DumperPlugin>();for (DumperPlugin defaultPlugin :Stetho.defaultDumperPluginsProvider(mContext).get()) {plugins.add(defaultPlugin);}plugins.add(new MyDumperPlugin());return plugins;}
}
至于MyDumperPlugin的编写,可以参考官方的写法,插件的使用是与dumpapp工具结合的,而上文中的dumpapp只是截了一张图,却没有解释如何使用,其实该插件位于官方项目的scripts目录下,该目录中的文件如图所示
从图中看到,没有windows下的执行文件,这几个文件应该是linux下或者mac下执行的,windows下式执行不了的,在linux下使用是极其简单的,只要将其加入环境变量,使用dumpapp –help命令即可查看使用说明,本文不在赘述,有兴趣的同学可以参考本文最后的两个链接进行摸索。
源码下载
http://download.csdn.net/detail/sbsujjbcy/8652377
相关地址
第一个是youtube上的一个全面介绍Stetho的视频,第二个是官方网站,有需要的可以参考。
- 使用Stetho进行调试(自备梯子)
- Stetho官网
Android 调试神器-Stetho(Facebook出品)的使用相关推荐
- 安卓调试神器-Stetho(Facebook出品)的使用
前言 Chrome的Developer Tools对于WEB开发者来讲几乎是一个神器,而Chrome Store里也有无奇不有的插件,如果Chrome能调安卓应用应该是一件美好的事,而Facebook ...
- Android调试神器stetho使用详解和改造 1
本文由云+社区发表 作者:NaOH 概述 stetho是Facebook开源的一个Android调试工具,项目地址:facebook/stetho 通过Stetho,开发者可以使用chrome的ins ...
- android调试神器Stetho
前言: 在我们平时开发中,经常会用到网络请求,sharepreference或者是数据库,但是要做调试的时候却很麻烦.网络请求需要用抓包,数据库调试起来就更麻烦了,需要root手机,并且频繁的打开DD ...
- Android开发调试神器——Stetho介绍
随着Android开发技术的逐步完善,好用的插件,开源项目越来越多,善于使用这些插件能够大大提升你的开发效率.今天介绍一个Facebook开源的Andorid调试工具. 由Facebook推出的Ste ...
- android调试stetho的那点事
在调试安卓程序的过程中,受不了每次看日志查看网络的响应和导出db的动作(甚至有时候都无法导出db),这里安利一个facebook出品的神器 stetho,不过这个有些限制,在使用的时候一定的通过usb ...
- Stetho简化Android调试(二)
Stetho简化Android调试(一) 一文中讲述了如何使用Stetho结合Chrome远程调试Android App. Stetho给我们调试带来很大的便利,效率显著提升的同时也产生一个问题:如果 ...
- Android开发神器:Pandora
Android开发神器:Pandora 前言 工欲善其事,必先利其器.开发效率很大程度上取决于开发工具,举个例子,Web前端开发页面调试run一下几秒钟,Android客户端run一下,3.5分钟起步 ...
- 调试利器——Stetho
Stetho 是Facebook推出的Android 调试平台,基于 Chrome Developer Tools ,查看数据库和调试网络请求方面特别方便. 下面开始在应用中继承Stetho: 1.引 ...
- web移动端调试神器Eruda
在Web开发过程中,对html页面进行开发和调试的时候都会用到浏览器提供的调试工具,小编我最常用的就是Chrome浏览器自带的开发者工具了,可以很方便的对JS代码进行断点调试,log也很方便.但是在移 ...
最新文章
- 透過proxychains讓不支持代理的程序通過代理上網
- Java字符串的子串
- mysql 常规命令操作_mysql数据库常规命令操作
- 15拆分成3个不同的自然数_15个小时搜救破拆,他磨破3双手套营救出4个生还者...
- 系统带你学习 WebAPIs 第三讲
- gcc -l参数和-L参数
- RocketMQ(六)—IndexFile详解
- java在控制台输出空心正方形,菱形,空心菱形
- 删除重复行 oracle,Oracle删除重复行传智播客
- MySql存储过程的操作
- EPLAN P2.7安装教程
- dcs系统中数据服务器的冗余,如何提升DCS系统的可靠性?这篇文章讲透了
- 微信小程序 云开发 图片内容安全 珊瑚图片内容安全 api
- Java自学路线总结
- 王者荣耀鸿蒙抽奖,爆料:天行者抽奖乾坤福袋鸿蒙秘宝将再出现
- 【愚公系列】2022年09月 微信小程序-微信小程序实现网页一键登录功能
- 24种设计模式的定义和使用场合
- 成都拓嘉启远:拼多多上产品清单的条件
- Techstars携手Alphabit Fund与Launchpool,在伦敦推出专注于区块链的新加速器
- 学校计算机室应该配备哪种灭火器,学校教学楼应配备的灭火器型号是什么
热门文章
- MySQL跳过密码登录并修改用户密码
- 数学以如此直观的方式与生物学联系|如何用Python计算出一只微生物(一)
- 如何解决计算机黑屏问题,电脑黑屏不显示怎么办?不花钱就能解决的方法,分分钟教会你!...
- 海绵宝宝也懂的登录态:Cookie、Session和Token
- 快速获取js数组的最后一项
- 关于apk签名文件格式从.keystore转换成.jks的记载
- 简单记录一下xunsearch的小坑
- Linux上安装部署Solr-4.10.4并测试
- C语言选择排序法(通俗易懂类型)
- Ubuntu下vscode使用