[译]仅在debug的情况下使用Stetho

/ 0评 / 3

Stetho介绍

Stetho是facebook推出的一个Android调试框架,可以在Google浏览器上面轻松查看应用的数据库、Sp、网络请求、UI等信息。

项目地址:https://github.com/facebook/stetho

//必须引用
implementation 'com.facebook.stetho:stetho:1.5.1'
//配合okhttp
implementation 'com.facebook.stetho:stetho-okhttp3:1.5.1'

不过由于Facebook没有类似leakcanary那样提供noop包,所以如果我们仅仅使用如下代码很容易导致安全问题

if (BuildConfig.DEBUG){
	Stetho.initializeWithDefaults(this);
}

解决方案

1、仅仅在build debug情况下依赖Stetho

debugImplementation 'com.facebook.stetho:stetho:1.5.1'

2、仅仅在build debug的情况下进行初始化

创建文件夹src/debug/java,与src/main/java类似,不同的是,只有在debug的情况下src/debug/java下的代码会被打包到apk中,release中不会被打包进去。

然后在java文件夹中新建包名以及一个类继承Application在里面进行初始化操作

public class DebugApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        Stetho.initializeWithDefaults(this);
    }
}

然后在debug文件夹下面新建AndroidManifest.xml

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        tools:replace="android:name"
        android:name="com.stetho.debug.DebugApp"/>

</manifest>

由于我们使用了tools:replace="android:name",当debug build的使用,将会替换到主AndroidManifest文件中的name属性,但是当release的时候还是使用的原来的Application。

参考链接:https://www.littlerobots.nl/blog/stetho-for-android-debug-builds-only/

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注