集成Stetho,区分Debug和Release版本

背景:

Stetho是Facebook出品的基于Chrome浏览器的安卓调测工具,可以监控网络交互,方便修改数据库和SP文件等。

问题描述:

集成Stetho有一个问题,未区分debug和release提供版本,如果集成进来,就会导致debug和release版本都带有此功能。如果要release版本不带有,则需要在编译release版本时,删除掉集成的代码。这个事情非常伤脑筋。

解决方案:

方式一

模仿leakcanary等提供release版本。 缺点:后面官方版本修改了,这个包还得跟着修改,所以舍弃。

方式二

将对Stetho的依赖放到debug编译方式特有的代码中。这个可以通过为debug和release版本指定不同的代码目录来实现。

方式二操作步骤

  • build.gradle文件增加如下配置:
    1.android节点下增加:
    sourceSets {
        debug {
            java.srcDirs = ['src/main/debug/java']
        }
        release {
            java.srcDirs = ['src/main/release/java']
        }
    }

2.dependencies节点下增加:

debugImplementation 'com.facebook.stetho:stetho:1.3.1'
debugImplementation 'com.facebook.stetho:stetho-okhttp3:1.3.1'
  • 在src/main目录下增加给debug和release版本分别提供的代码文件,目录结构样例如下:
    image.png
  • 在debug和release相同目录下放置相同的类,一个保持正常的实现,一个保持空实现。
    debug相应目录下防止的ThirdPartyUtil.java类:
import android.app.Application;
import com.facebook.stetho.okhttp3.StethoInterceptor;
import okhttp3.OkHttpClient;

public class ThirdPartyUtil {
    /**
     * 初始化Stetho,为okhttp设置拦截。下方代码仅为示例,具体拦截设置请自行查找。
     */
    public static void initStetho(Application application, OkHttpClient.Builder okHttpBuilder) {
        com.facebook.stetho.Stetho.initializeWithDefaults(application);
        okHttpBuilder.addNetworkInterceptor(new StethoInterceptor());
    }
}

release相应目录下防止的ThirdPartyUtil.java类(实现为空):

import android.app.Application;
import okhttp3.OkHttpClient;

public class ThirdPartyUtil {
    /**
     * 保持为空实现,不依赖Stetho。
     */
    public static void initStetho(Application application, OkHttpClient.Builder okHttpBuilder) {
    }
}
  • Application代码中调用stetho初始化方法:
    ThirdPartyUtil.initStetho(this, okHttpBuilder);
  • 添加混淆配置文件:
-dontwarn com.squareup.okhttp.**
-keep class com.squareup.okhttp.**{*;}

# okhttp
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**

# okio
-keep class sun.misc.Unsafe { *; }
-dontwarn java.nio.file.*
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-keep class okio.**{*;}
-dontwarn okio.**

附录:

参考:https://www.jianshu.com/p/38d8324b126a

猜你喜欢

转载自blog.csdn.net/yinxing2008/article/details/83016804