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的体积变大。而这些完全是没有必要的。

当然,也有朋友会说:我发版的时候,把相关的代码删掉就行了。这样虽然可行,但是偶尔也会忘记,并且相对麻烦。下面我就给出两种方式来解决这一问题:

方法一:

  1. 修改Stetho的依赖方式为debugCompile
dependencies {   debugCompile 'com.facebook.stetho:stetho:1.3.1'debugCompile 'com.facebook.stetho:stetho-okhttp3:1.3.1'
}
  1. 写一个接口StethoHelper
public interface StethoHelper { void init(Context context); OkHttpClient configureInterceptor(OkHttpClient httpClient); } 
  1. StethoHelper的实现类ReleaseStethoHelper
public class ReleaseStethoHelper implements StethoHelper { @Override public void init(Context context) { } @Override public OkHttpClient configureInterceptor(OkHttpClient httpClient) { return httpClient; } } 
  1. 新建一个debug文件夹,如下图:
debug folder

debug folder

debug folder

  1. 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(); } } 
  1. 修改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()' } } } 
  1. 使用姿势
public class App extends Application { @Override public void onCreate() { super.onCreate(); BuildConfig.STETHO.init(this); } } 

方法二:

  1. 修改Stetho的依赖方式为debugCompile
dependencies {   debugCompile 'com.facebook.stetho:stetho:1.3.1'debugCompile 'com.facebook.stetho:stetho-okhttp3:1.3.1'
}
  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; } } 
  1. 使用姿势
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调试(二)相关推荐

  1. Stetho简化Android调试(一)

    原文链接 https://www.jianshu.com/p/42303aa8299a 在开发 Android 应用的时候,有时候我们需要查看数据库.SharePreference等.通常的做法是把相 ...

  2. Android 调试神器-Stetho(Facebook出品)的使用

    前言 Chrome的Developer Tools对于WEB开发者来讲几乎是一个神器,而Chrome Store里也有无奇不有的插件,如果Chrome能调安卓应用应该是一件美好的事,而Facebook ...

  3. stetho调试android程序,使用stetho和chrome调试Andorid应用

    Stetho是Android应用程序的调试桥接器.启用它后,开发人员即可通过Chrome开发者工具来调试应用,这些功能都源于Chrome桌面浏览器.开发者还可以有选择性启用可选的dumpapp工具,该 ...

  4. android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)

    关键词: android  camera CMM 模组 camera参数  CAMIF 平台信息: 内核: linux 系统: android 平台:S5PV310(samsung exynos 42 ...

  5. java 安卓调试_【转】Android 调试技术

    一.JAVA层单步调试 二.Native层单步调试 三.JAVA层堆栈打印 1. 在指定的函数内打印相关java调用 Log.d(TAG,Log.getStackTraceString(new Thr ...

  6. Android 系统(249)---Android调试技巧(一)

    Android调试技巧(一) 本文介绍一些Android常见的调试技巧 一. 获取Trace 调用栈信息(Trace)是分析异常经常使用的,这里简单划分两类情况: 当前线程Trace: 当前执行流所在 ...

  7. android 调试笔记

    android 调试笔记 adb使用: 连接不上手机 C:\Users\Administrator\.android\adb_usb.ini   增加一行内容:  0x1782 安装第三方应用 $ a ...

  8. android alogd,Android调试源码正确姿势打开ALOGV

    Android调试源码正确姿势打开ALOGV 前言 当我沉浸在Android C++的世界中,准备通过其相关的ALOGV日志显示出来的时候,却发现怎么在logcat里面也找不到相关的日志,也许对And ...

  9. android广播传递参数,Android调试助手(AndroidDebugger)

    测试:xxx工,你的程序又出bug了!界面切换几下就不行了. 开发:没道理啊,我都测过好几遍了,应该不会 测试:我这复现好几次了. 开发:拉个Log来分析下啦. 测试:拉取日志命令输入中....... ...

最新文章

  1. 人脸对齐--One Millisecond Face Alignment with an Ensemble of Regression Trees
  2. 移动前端开发中添加一些webkit专属的HTML5头部标签,帮助浏览器更好解析html代码,更好地将移动web前端页面表现出来。本文整理一些常用的meta标签...
  3. GCN的多层卷积的流程图
  4. sublime 无法下载插件解决办法(亲测有效)
  5. C++:Vector和List的实现
  6. ubuntu boot空间不足_安装 Ubuntu 双系统
  7. Matlab常见问题处理——错误使用 xlswrite (line 219),调用错误,调度异常: 参数错误。
  8. 海岸鸿蒙慕建洲,用于校准液体自动颗粒计数器的标准物质及其制备方法.pdf
  9. y7000p内存是一个16还是8+8_现货黄金创8年新高!黄金ETF年内净值增逾16%,买入还是离场?...
  10. 将实例的生成交给子类——工厂方法模式
  11. Windows核心编程学习九:利用内核对象进行线程同步
  12. Unity3D游戏开发,适配阿拉伯地区文本显示
  13. 程序员转项目管理,需要做什么?
  14. 简易网页(HTML)
  15. Unity3d任务模型自动寻路(人员疏散)
  16. 可口可乐启示录:把世界装进瓶子里的4个商人【姜太公公】
  17. 《今日美国》Twitter账号遭遇黑客攻击
  18. Android 开机动画(bootanimation)启动
  19. 为openwrt 15.05(Chaos Calmer) 新增优酷土豆路由宝配置
  20. 传苹果Siri中文版下月推出 支持更多国家语言

热门文章

  1. android字符串点击事件,Android匹配字符串高亮并设置点击事件
  2. JAVA实现二叉树带权路径长度和_哈夫曼树的构建与最小带权路径长度
  3. python判断音频是问句_Gamma Lab:让机器回答一个自然语言问题需要几步?
  4. vue一个页面用两个以上页面 时时刷新
  5. python中使用函数的优点_在python中使用自定义初始化函数而不是`__init__`的好处...
  6. idea2016 android genyomtion,Android Studio Genyomtion配置
  7. 简易修复工具_汽车划痕的简单修复法,你get了吗?
  8. md5修改工具_【q001】如何校验文件的MD5
  9. linux apache gzip压缩,Linux入门教程:配置Apache开启gzip压缩传输,gzip压缩 LoadModul
  10. python线程池传入多个参数_python线程池问题