Coder Social home page Coder Social logo

workbox's Introduction

Requirements

Android 4.4+ (API level 19+)

如果想在低版本中使用workbox,请在Manifest.xml中添加如下代码:

<uses-sdk tools:overrideLibrary="com.su.workbox" />

部分功能在低版本手机中将无法使用

Workbox

debugApi 'com.su:workbox.annotations:0.9.0'
debugAnnotationProcessor 'com.su:workbox.compiler:0.9.0'
debugImplementation 'com.su:workbox:0.9.0'
releaseImplementation 'com.su:workbox-no-op:0.9.0'

需要将module名称传给compiler

defaultConfig {
    ...
    javaCompileOptions {
        annotationProcessorOptions {
            arguments = [MODULE_NAME: project.getName()]
        }
    }
}

您可以通过实现自己的com.su.workbox.WorkboxSupplier来改变策略。

初始化workbox

private static void initWorkbox(Application application) {
    Workbox.init(application);
}

或者

private static void initWorkbox(Application application, String className) {
    Workbox.init(application, "您的WorkboxSupplier类名");
}

用户若有自定义相关信息,需要继承WorkboxSupplier重写相关方法,并使用其初始化Workbox

监听activity/fragment生命周期

如果只想监听activity生命周期,初始化Workbox之后无需做额外的任何事情即可在生命周期历史记录中看到activity生命周期记录,如果想记录fragment生命周期,则需在您的BaseFragment的onAttach方法中调用

Workbox.registerFragment(this)

由于生命周期记录是存储在数据库中的,所以需要您定期手动清理。

收集崩溃日志

需要将CrashLogHandler设置为DefaultUncaughtExceptionHandler

if (BuildConfig.DEBUG) {
    Thread.setDefaultUncaughtExceptionHandler(Workbox.newLogUncaughtExceptionHandler(true));
}

或者,在您的UncaughtExceptionHandler中调用CrashLogHandler其uncaughtException方法

根据需要设置是否杀死进程

由于崩溃日志是存储在数据库中的,所以需要您定期手动清理。普通日志并没有存在数据库中,无需特殊处理。

模拟activity传参跳转时,可以对activity进行如下类似配置

@NoteComponent(description = "页面传参测试",
        type = "activity",
        parameters = {@Parameter(parameterName = "object", parameterClass = ObjectParameter.class, parameterRequired = false),
                @Parameter(parameterName = "objects", parameterClass = ObjectParameter[].class, parameterRequired = false),
                @Parameter(parameterName = "int", parameterClass = int.class),
                @Parameter(parameterName = "long", parameterClass = long.class, parameterRequired = false)})

其中type必须要指定为activity,参数不仅可以配置为基本数据类型也可以配置实现Parcelable的类型。

启动service也类似。

其中getRequestBodyExcludeKeys是下文提到的过滤特定的请求字段。

{ ​ "body": { ​ "random": "abc" ​ }, ​ "traceId": "efg" }

例如,当您想过滤请求体中body字段下的random字段和traceId字段时,需要按如下格式覆盖此函数:

@NonNull
@Override
public List<List<String>> getRequestBodyExcludeKeys() {
    List<List<String>> keys = new ArrayList<>();
    List<String> random = new ArrayList<>();
    random.add("body");
    random.add("random");
    keys.add(random);
    List<String> traceId = new ArrayList<>();
    traceId.add("traceId");
    keys.add(traceId);
    return keys;
}

在使用域名切换时,可以覆盖urlMapping来实现自己的url映射策略

Network中,部分功能需要配合OkHttp一起使用,可以给OkHttp添加如下拦截器

builder.addInterceptor(Workbox.getHostInterceptor());
builder.addInterceptor(Workbox.getMockInterceptor());
builder.addInterceptor(Workbox.getDataCollectorInterceptor());
builder.addInterceptor(Workbox.getDataUsageInterceptorInterceptor());

HostInterceptor用于域名切换

MockInterceptor用于数据模拟

DataCollectorInterceptor用于自动收集数据

DataUsageInterceptor用于自动统计流量

在WebView中切换域名时需要集成如下代码:

String host = Workbox.getWebViewHost();
if (!TextUtils.isEmpty(host)) {
    mUrl = Workbox.urlMapping(mUrl, host);
}

更多细节请参阅wiki

功能列表

可以通过上面的开关给调试模块在桌面上添加入口。

workbox's People

Contributors

su1216 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.