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 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()'
}
}
}
- 使用姿势
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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
Stetho简化Android调试(二)的更多相关文章
- Stetho简化Android调试(一)
在开发 Android 应用的时候,有时候我们需要查看数据库.SharePreference等.通常的做法是把相关文件pull出来,而前提必须是手机得root.如果没有root,那就只能通过打印或其它 ...
- 【转】Android LCD(二):LCD常用接口原理篇
关键词:android LCD TFT TTL(RGB) LVDS EDP MIPI TTL-LVDS TTL-EDP 平台信息:内核:linux2.6/linux3.0系统:android/ ...
- 【转】android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)
关键词:android camera CMM 模组 camera参数 CAMIF平台信息:内核:linux系统:android 平台:S5PV310(samsung exynos 4210) 作者 ...
- Android进阶(二十)AndroidAPP开发问题汇总(四)
· Android进阶(二十)AndroidAPP开发问题汇总(四) android:layout_width和android:width的区别 基中的android:layout_width和and ...
- Android调试桥 adb安装详解
Android调试桥(adb) 一.简介 Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信.adb 命令便于执行各种设备操作(例如安装和调试应用),并提供对 Uni ...
- 在 MAC OS X 安装 ADB (Android调试桥)
什么是 ADB? Android调试桥( adb )是一个开发工具,帮助安卓设备和个人计算机之间的通信. 这种通信大多是在USB电缆下进行,但是也支持Wi-Fi连接. adb 还可被用来与电脑上运行的 ...
- 2.[WP Developer体验Andriod开发]Andriod Studio结合Visual Studio Emulator for Android调试Android App
0. 工欲善其事必先利其器 上一篇博客对比了一下Android和WinPhnoe的布局容器,后续篇章重点放在Android的开发上了. 说到开发就绕不开调试程序,调试Android App我们有2种选 ...
- Android 开发笔记 “android调试遇到ADB server didn't ACK以及顽固的sjk_daemon进程 ”
资源来源:http://blog.csdn.net/wangdong20/article/details/20839533 做Android调试的时候经常会遇到,程序写好了,准备接上手机调试,可不一会 ...
- [Android学习笔记]Android调试
Eclipse Debug 快捷键: [Ctrl + Shift + B]: 添加/取消断点 [F5]:进入方法中 [F6]:单步执行 [F7]:执行完毕此方法 [F8]:继续执行,直接跳到下一个断点 ...
随机推荐
- Lua Doc生成工具
Luadoc http://keplerproject.github.io/luadoc/ Overview LuaDoc is a documentation generator tool for ...
- 【LeetCode】108. Convert Sorted Array to Binary Search Tree
Problem: Given an array where elements are sorted in ascending order, convert it to a height balance ...
- BN_batch normalization
参考: https://zhuanlan.zhihu.com/p/27938792 做法 设,每个batch输入是 (其中每个 都是一个样本, 是batch size) 假如在第一层后加入Batch ...
- CPU缓存一致性协议—MESI详解
MESI(也称伊利诺斯协议)是一种广泛使用的支持写回策略的缓存一致性协议,该协议被应用在Intel奔腾系列的CPU中. MESI协议中的状态 CPU中每个缓存行使用的4种状态进行标记(使用额外的两位b ...
- mvc中异常页面的设置
参考原文: http://blog.csdn.net/zjlovety/article/details/48734791 这种异常处理就是说,在mvc发生未处理异常时,对用户展示的页面. 第一种能被m ...
- Ajax原生请求和java对象转成json
\黑马程序员_超全面的JavaWeb视频教程vedio\黑马程序员_超全面的JavaWeb教程-源码笔记\JavaWeb视频教程_day23-资料源码\ajax_code\day23_3 本代码中有模 ...
- The question that comes to mind
1.在 vue 与小程序中 属性中的小括号是否都可以写表达式 例如: <view checked={{op==1?false:true}}></view>
- 微信小程序之内嵌网页(webview)
设置权限 要在小程序中访问外部网页,需要先设置允许访问的业务网站的域名.让我们先登录小程序平台管理后台页面,进入“设置” => "开发设置",可以看到这边多出来了一块“业务域 ...
- VMware网络问题
配置好网络的虚拟机,隔一段时间后可能会发现网络不可用了,此时可以检查一下以下3个服务是否开启 一般情况下,启动以上三个服务后网络就通了. 如果以上服务都启动了还不行,那就重启一下网络: # servi ...
- Sql server—— for xml path简单用法(可以按照分组把相同组的列中的不同的值,像字符串一样拼接在一起显示在分组之后的列中。)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAI8AAACWCAIAAABo2EyXAAAKeklEQVR4nO2dy27rNh7G+U7CFIrfZX