🍼Debug Bottle
Android Java / Kotlin 程序员开发调试工具。Debug Bottle的所有功能均建立在App的debug版本中,不会对release版本产生任何影响。Debug Bottle旨在提高开发效率,把控App质量。
Demo App可在Google Play中下载:
功能
- 简易的HTTP请求嗅探
- 3D化Activity视图
- Shared Preferences编辑器
- 使用Strict mode调试软件
- 截获App崩溃,收集崩溃日志
- 轻松找到可能出现的内存泄漏代码
- 找到可能出现的UI卡顿代码
- 简易创造Activity入口,及测试Runnable
Http监听
通过OkHttp的拦截器监听通过App的Http请求,并记录在Debug Bottle的日志中。记录过的日志可以通过分享按钮分享给其他开发者。
3D化视图
通过设置打开“3D”功能,可以更直观地看到当前Activity的layout结构。
本功能支持单点手势旋转,双点手势缩放和位移。
Shared Preferences编辑器
通过Debug Bottle可以简单地编辑App用到的所有Shared Preferences。
使用Strict Mode
Debug Bottle可以在运行时启用或禁用Strict Mode。StrictMode最常用来捕捉应用程序的主线程,它将报告与线程及虚拟机相关的策略违例。一旦检测到策略违例(policy violation),你将获得警告,其包含了一个栈trace显示你的应用在何处发生违例。除了主线程,我们还可以在Handler,AsyncTask,AsyncQueryHandler,IntentService等API中使用StrictMode。更多使用方法介绍,参见官方开发者文档。
崩溃日志
收集所有崩溃的信息,存储成日志文件。
使用Leak Canary
Debug Bottle中编译进了Leak Canary,所有Leak Canary的功能都可以使用了,并且可以通过Debug Bottle来控制开关。Leak Canary的使用方法请参考官方Wiki。
使用Block Canary
加入了支持Kotlin的Block Canary,可以监控UI线程卡死。
进入一切Activity并注入参数
简单的Activity/Runnable入口。可以随心所欲进入任何一个Activity,使用任何参数,甚至可以向App中注入想要测试的Intent。
使用方法
安装嵌入Debug Bottle的App后,你将看到初你App外的新图标🍼。点击进入Debug面板。
搭建方法
1. 加入Gradle依赖
首先在工程Gradle文件中添加snapshot源:1
2
3
4
5
6
7
8allprojects {
repositories {
...
maven {
url "https://oss.sonatype.org/content/repositories/snapshots"
}
}
}
然后在主模块中(Application类所在模块)加入依赖:1
2
3
4
5
6
7
8
9
10
11
12
13dependencies {
debugCompile 'com.exyui.android:debug-bottle-runtime:1.1.1'
// 如果你的工程是Java工程,使用此依赖
releaseCompile 'com.exyui.android:debug-bottle-noop-java:1.1.1'
testCompile 'com.exyui.android:debug-bottle-noop-java:1.1.1'
// 如果你的工程是Kotlin工程,使用此依赖
releaseCompile 'com.exyui.android:debug-bottle-noop-kotlin:1.1.1'
testCompile 'com.exyui.android:debug-bottle-noop-kotlin:1.1.1'
compile 'com.android.support:appcompat-v7:23.2.0+'
}
Debug Bottle不仅支持API 23+,还可以支持API 22. 若想使用API 22,请按照下面方式加入依赖:1
2
3
4
5
6
7
8
9
10
11
12
13dependencies {
debugCompile 'com.exyui.android:debug-bottle-runtime:1.0.6-support22'
// 如果你的工程是Java工程,使用此依赖
releaseCompile 'com.exyui.android:debug-bottle-noop-java:1.0.6-support22'
testCompile 'com.exyui.android:debug-bottle-noop-java:1.0.6-support22'
// 如果你的工程是Kotlin工程,使用此依赖
releaseCompile 'com.exyui.android:debug-bottle-noop-kotlin:1.0.6-support22'
testCompile 'com.exyui.android:debug-bottle-noop-kotlin:1.0.6-support22'
compile 'com.android.support:appcompat-v7:22+'
}
若只需支持API23,请按照下面方式加入依赖:1
2
3
4
5
6
7
8
9
10
11
12
13dependencies {
debugCompile 'com.exyui.android:debug-bottle-runtime:1.0.6-support23'
// 如果你的工程是Java工程,使用此依赖
releaseCompile 'com.exyui.android:debug-bottle-noop-java:1.0.6-support23'
testCompile 'com.exyui.android:debug-bottle-noop-java:1.0.6-support23'
// 如果你的工程是Kotlin工程,使用此依赖
releaseCompile 'com.exyui.android:debug-bottle-noop-kotlin:1.0.6-support23'
testCompile 'com.exyui.android:debug-bottle-noop-kotlin:1.0.6-support23'
compile 'com.android.support:appcompat-v7:23+'
}
2. 编辑Manifest
加入Debug Bottle的主Activity:1
2
3
4<activity
android:name="com.exyui.android.debugbottle.components.DTDrawerActivity"
android:theme="@style/Theme.AppCompat.Light"
android:label="调试工具"/>
“调试工具”是Debug Bottle在Android launch pad中显示的名称, 可以随意命名。
3. 在Application中插入Debug Bottle代码
首先实现Block Canary运行必要的上下文类:1
public class AppBlockCanaryContext extends BlockCanaryContext {...}
然后在Application的onCreate中插入代码:1
2
3
4
5
6
7
8
9
10
11
12
13public class MyApplication extends Application{
public void onCreate() {
super.onCreate();
DTInstaller.install(this)
.setBlockCanary(new AppBlockCanaryContext(this))
.setOkHttpClient(httpClient)
.setInjector("your.package.injector.ContentInjector")
.setPackageName("your.package")
.enable()
.run();
}
}
或者如果你的工程是Kotlin,你还可以这样写:1
2
3
4
5
6
7
8
9
10
11
12class MyApplication: Application() {
override fun onCreate() {
super.onCreate()
DTInstaller.install(this)
.setBlockCanary(AppBlockCanaryContext(this))
.setOkHttpClient(httpClient)
.setInjector("your.package.injector.ContentInjector")
.setPackageName("your.package")
.enable()
.run()
}
}
收工。
相关链接
License
1 | Debug Bottle |
Debug Bottle 功能实现是基于以下项目的派生:
- Apache License 2.0