Stetho简化Android调试(二)
Stetho简化Android调试(一) 一文中讲述了如何使用Stetho
结合Chrome
远程调试Android App
。
Stetho
给我们调试带来很大的便利,效率显著提升的同时也产生一个问题:如果release版本中依然使用Stetho就会造成应用程序数据的泄露。因此我们只需在调试阶段(debug)
中使用。因此有了下面这段代码:
public class App extends Application { @Override public void onCreate() { super.onCreate(); if(BuildConfig.DEBUG){ // Debug模式下才初始化 Stetho.initializeWithDefaults(this); } } }
是的,这样确实可以解决release
版本中造成的应用程序数据泄露的问题。但是,对于 ‘只在调试阶段(debug)
中使用’ 这个问题,依然没有很好的解决。Stetho
相关的代码,jar
包会被打包进我们最终的apk
中,造成apk
的体积变大。而这些完全是没有必要的。
当然,也有朋友会说:我发版的时候,把相关的代码删掉就行了。这样虽然可行,但是偶尔也会忘记,并且相对麻烦。下面我就给出两种方式来解决这一问题:
方法一:
- 修改
Stetho
的依赖方式为debugCompile
dependencies { debugCompile 'com.facebook.stetho:stetho:1.3.1'debugCompile 'com.facebook.stetho:stetho-okhttp3:1.3.1'
}
- 写一个接口
StethoHelper
public interface StethoHelper { void init(Context context); OkHttpClient configureInterceptor(OkHttpClient httpClient); }
StethoHelper
的实现类ReleaseStethoHelper
public class ReleaseStethoHelper implements StethoHelper { @Override public void init(Context context) { } @Override public OkHttpClient configureInterceptor(OkHttpClient httpClient) { return httpClient; } }
- 新建一个
debug
文件夹,如下图:
StethoHelper
的实现类DebugStethoHelper
(位于新建的debug
文件夹下)
public class DebugStethoHelper implements StethoHelper { @Override public void init(Context context) { Stetho.initializeWithDefaults(context); } @Override public OkHttpClient configureInterceptor(OkHttpClient httpClient) { return httpClient.newBuilder().addNetworkInterceptor(new StethoInterceptor()).build(); } }
- 修改
build.gradle
文件
android {// ...buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' buildConfigField 'com.upd.stethosample.common.stetho.StethoHelper', 'STETHO', 'new com.upd.stethosample.common.stetho.ReleaseStethoHelper()' } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' buildConfigField 'com.upd.stethosample.common.stetho.StethoHelper', 'STETHO', 'new com.upd.stethosample.DebugStethoHelper()' } } }
- 使用姿势
public class App extends Application { @Override public void onCreate() { super.onCreate(); BuildConfig.STETHO.init(this); } }
方法二:
- 修改
Stetho
的依赖方式为debugCompile
dependencies { debugCompile 'com.facebook.stetho:stetho:1.3.1'debugCompile 'com.facebook.stetho:stetho-okhttp3:1.3.1'
}
- 利用反射机制编写StethoUtils
public class StethoUtils { public static void init(Context context) { try { Class<?> stethoClass = Class.forName("com.facebook.stetho.Stetho"); Method initializeWithDefaults = stethoClass.getMethod("initializeWithDefaults", Context.class); initializeWithDefaults.invoke(null, context); } catch (Exception e) { e.printStackTrace(); } } public static OkHttpClient configureInterceptor(OkHttpClient httpClient) { try { Class<?> aClass = Class.forName("com.facebook.stetho.okhttp3.StethoInterceptor"); return httpClient.newBuilder().addNetworkInterceptor((Interceptor) aClass.newInstance()).build(); } catch (Exception e) { e.printStackTrace(); } return httpClient; } }
- 使用姿势
public class App extends Application { @Override public void onCreate() { super.onCreate(); if(BuildConfig.DEBUG) { StethoUtils.init(this); } } }
作者:WaitingAnd
链接:https://www.jianshu.com/p/b4571fa3b001
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
转载于:https://www.cnblogs.com/Im-Victor/p/9673528.html
Stetho简化Android调试(二)相关推荐
- Stetho简化Android调试(一)
原文链接 https://www.jianshu.com/p/42303aa8299a 在开发 Android 应用的时候,有时候我们需要查看数据库.SharePreference等.通常的做法是把相 ...
- Android 调试神器-Stetho(Facebook出品)的使用
前言 Chrome的Developer Tools对于WEB开发者来讲几乎是一个神器,而Chrome Store里也有无奇不有的插件,如果Chrome能调安卓应用应该是一件美好的事,而Facebook ...
- stetho调试android程序,使用stetho和chrome调试Andorid应用
Stetho是Android应用程序的调试桥接器.启用它后,开发人员即可通过Chrome开发者工具来调试应用,这些功能都源于Chrome桌面浏览器.开发者还可以有选择性启用可选的dumpapp工具,该 ...
- android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)
关键词: android camera CMM 模组 camera参数 CAMIF 平台信息: 内核: linux 系统: android 平台:S5PV310(samsung exynos 42 ...
- java 安卓调试_【转】Android 调试技术
一.JAVA层单步调试 二.Native层单步调试 三.JAVA层堆栈打印 1. 在指定的函数内打印相关java调用 Log.d(TAG,Log.getStackTraceString(new Thr ...
- Android 系统(249)---Android调试技巧(一)
Android调试技巧(一) 本文介绍一些Android常见的调试技巧 一. 获取Trace 调用栈信息(Trace)是分析异常经常使用的,这里简单划分两类情况: 当前线程Trace: 当前执行流所在 ...
- android 调试笔记
android 调试笔记 adb使用: 连接不上手机 C:\Users\Administrator\.android\adb_usb.ini 增加一行内容: 0x1782 安装第三方应用 $ a ...
- android alogd,Android调试源码正确姿势打开ALOGV
Android调试源码正确姿势打开ALOGV 前言 当我沉浸在Android C++的世界中,准备通过其相关的ALOGV日志显示出来的时候,却发现怎么在logcat里面也找不到相关的日志,也许对And ...
- android广播传递参数,Android调试助手(AndroidDebugger)
测试:xxx工,你的程序又出bug了!界面切换几下就不行了. 开发:没道理啊,我都测过好几遍了,应该不会 测试:我这复现好几次了. 开发:拉个Log来分析下啦. 测试:拉取日志命令输入中....... ...
最新文章
- 人脸对齐--One Millisecond Face Alignment with an Ensemble of Regression Trees
- 移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析html代码,更好地将移动web前端页面表现出来。本文整理一些常用的meta标签...
- GCN的多层卷积的流程图
- sublime 无法下载插件解决办法(亲测有效)
- C++:Vector和List的实现
- ubuntu boot空间不足_安装 Ubuntu 双系统
- Matlab常见问题处理——错误使用 xlswrite (line 219),调用错误,调度异常: 参数错误。
- 海岸鸿蒙慕建洲,用于校准液体自动颗粒计数器的标准物质及其制备方法.pdf
- y7000p内存是一个16还是8+8_现货黄金创8年新高!黄金ETF年内净值增逾16%,买入还是离场?...
- 将实例的生成交给子类——工厂方法模式
- Windows核心编程学习九:利用内核对象进行线程同步
- Unity3D游戏开发,适配阿拉伯地区文本显示
- 程序员转项目管理,需要做什么?
- 简易网页(HTML)
- Unity3d任务模型自动寻路(人员疏散)
- 可口可乐启示录:把世界装进瓶子里的4个商人【姜太公公】
- 《今日美国》Twitter账号遭遇黑客攻击
- Android 开机动画(bootanimation)启动
- 为openwrt 15.05(Chaos Calmer) 新增优酷土豆路由宝配置
- 传苹果Siri中文版下月推出 支持更多国家语言
热门文章
- android字符串点击事件,Android匹配字符串高亮并设置点击事件
- JAVA实现二叉树带权路径长度和_哈夫曼树的构建与最小带权路径长度
- python判断音频是问句_Gamma Lab:让机器回答一个自然语言问题需要几步?
- vue一个页面用两个以上页面 时时刷新
- python中使用函数的优点_在python中使用自定义初始化函数而不是`__init__`的好处...
- idea2016 android genyomtion,Android Studio Genyomtion配置
- 简易修复工具_汽车划痕的简单修复法,你get了吗?
- md5修改工具_【q001】如何校验文件的MD5
- linux apache gzip压缩,Linux入门教程:配置Apache开启gzip压缩传输,gzip压缩
LoadModul
- python线程池传入多个参数_python线程池问题