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 false
proguardFiles 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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Stetho简化Android调试(二)的更多相关文章

  1. Stetho简化Android调试(一)

    在开发 Android 应用的时候,有时候我们需要查看数据库.SharePreference等.通常的做法是把相关文件pull出来,而前提必须是手机得root.如果没有root,那就只能通过打印或其它 ...

  2. 【转】Android LCD(二):LCD常用接口原理篇

    关键词:android LCD TFT TTL(RGB)  LVDS  EDP MIPI  TTL-LVDS  TTL-EDP 平台信息:内核:linux2.6/linux3.0系统:android/ ...

  3. 【转】android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)

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

  4. Android进阶(二十)AndroidAPP开发问题汇总(四)

    · Android进阶(二十)AndroidAPP开发问题汇总(四) android:layout_width和android:width的区别 基中的android:layout_width和and ...

  5. Android调试桥 adb安装详解

    Android调试桥(adb) 一.简介 Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信.adb 命令便于执行各种设备操作(例如安装和调试应用),并提供对 Uni ...

  6. 在 MAC OS X 安装 ADB (Android调试桥)

    什么是 ADB? Android调试桥( adb )是一个开发工具,帮助安卓设备和个人计算机之间的通信. 这种通信大多是在USB电缆下进行,但是也支持Wi-Fi连接. adb 还可被用来与电脑上运行的 ...

  7. 2.[WP Developer体验Andriod开发]Andriod Studio结合Visual Studio Emulator for Android调试Android App

    0. 工欲善其事必先利其器 上一篇博客对比了一下Android和WinPhnoe的布局容器,后续篇章重点放在Android的开发上了. 说到开发就绕不开调试程序,调试Android App我们有2种选 ...

  8. Android 开发笔记 “android调试遇到ADB server didn't ACK以及顽固的sjk_daemon进程 ”

    资源来源:http://blog.csdn.net/wangdong20/article/details/20839533 做Android调试的时候经常会遇到,程序写好了,准备接上手机调试,可不一会 ...

  9. [Android学习笔记]Android调试

    Eclipse Debug 快捷键: [Ctrl + Shift + B]: 添加/取消断点 [F5]:进入方法中 [F6]:单步执行 [F7]:执行完毕此方法 [F8]:继续执行,直接跳到下一个断点 ...

随机推荐

  1. tcp_listen函数

    #include <netdb.h> #include <unistd.h> #include <stddef.h> #include <strings.h& ...

  2. web-hacking

    https://wizardforcel.gitbooks.io/web-hacking-101/content/1.html

  3. js获取网页面的高度和宽度

    网页可见区域宽:document.body.clientWidth网页可见区域高:document.body.clientHeight网页可见区域宽:document.body.offsetWidth ...

  4. Redis Fun使用

    using Newtonsoft.Json; using StackExchange.Redis; using System; using System.Configuration; using Sy ...

  5. 使用electron搭建桌面app的简便方法

    使用electron官方给出的`electron-quick-start`示例项目,将其拷贝下来, 1. git命令:   git clone https://github.com/electron/ ...

  6. mysql 文件操作 表

    一 :  访问库  use db1 查询当前表所在文件夹 :  select database(); 增:   create table t1(id int, name chat(10)); 查询:  ...

  7. BFS与DFS算法解析

    1)前言 和树的遍历类似,图的遍历也是从图中某点出发,然后按照某种方法对图种所有顶点进行访问,且仅访问一次. 但是图的遍历相对树的遍历更为复杂,因为图中任意顶点都能与其他顶点相邻,所以在图的遍历中必须 ...

  8. python正则表达式获取代理IP网站上的IP地址

    import urllib.request import re def open_url(url): req = urllib.request.Request(url) req.add_header( ...

  9. Matlab 读取 ROS bag 文件指定消息数据

    近期在接触Ros的时候遇到了一些问题,如何将rosbag中的信息提取出来进行进一步处理呢? 如三维点位置信息,视频信息(如果有的话)等等. 我采用的是MATLAB 读取bag信息 filepath=f ...

  10. np.nonzero()函数用法

    返回数组中不为0的元素的下标. 数组中元素可为布尔.整型和浮点型,返回值为元祖 一.一维数组 1.数组元素为布尔类型 a=np.array([True,False,True,False]) b=np. ...