Skip to content

su1216/workbox

Repository files navigation

Requirements

Android 5.0+ (API level 21+)

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

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

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

Workbox

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

需要将module名称传给compiler

def moduleName =  project.getName()

defaultConfig {
    ...
    javaCompileOptions {
        annotationProcessorOptions {
            arguments = [MODULE_NAME: moduleName]
        }
    }
}

您可以通过实现自己的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方法

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

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

使用任意门功能时,可以使用NoteComponent注解对activity进行如下类似Intent参数配置

@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的类型。

也可通过修改Workbox自动收集的Intent信息进行跳转,Workbox默认收集用户在打开页面时的Intent信息。

其中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

功能列表

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published