Facebook Sonar 移动端调试神器
官网、github、Demo地址
简介
Sonar是Android/iOS开发调试工具,包含桌面查看器(仅限 Mac),Android/iOS 调试 SDK。前身是Stetho,仅支持 Android,所以 Facebook 继续深入开发,诞生了 Sonar,大家也可以去了解下Stetho: github, 官网
使用
下载 Mac 调试查看器
地址
Android app 配置
1. app build.gradle 中增加依赖配置
1
2
3
4
5
6
7
8
| repositories {
jcenter()
}
dependencies {
debugCompile 'com.facebook.Sonar:Sonar:0.0.1'
}
|
2. Application onCreate 配置初始化代码
1
2
3
4
5
6
7
8
9
10
11
12
| public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, 0);
if (BuildConfig.DEBUG && SonarUtils.shouldEnableSonar(this)) {
final SonarClient client = AndroidSonarClient.getInstance(this);
client.addPlugin(new MySonarPlugin());
client.start();
}
}
}
|
3. 配置额外插件
1
2
3
4
5
6
| import com.facebook.Sonar.plugins.inspector.DescriptorMapping;
import com.facebook.Sonar.plugins.inspector.InspectorSonarPlugin;
final DescriptorMapping descriptorMapping = DescriptorMapping.withDefaults();
client.addPlugin(new InspectorSonarPlugin(mApplicationContext, descriptorMapping));
|
1
2
| importimport com.facebook.Sonar.plugins.network.NetworkSonarPlugin;
client.addPlugin( com.fa new NetworkSonarPlugin());
|
其实只能用 okhttp,而且需要设置 Interceptor,其他网络框架或者原生 httpurlconnection 是不支持的,看了官方 demo 才知道
1
2
3
4
5
6
| SonarOkhttpInterceptor interceptor = new SonarOkhttpInterceptor(networkPlugin);
okhttpClient = new OkHttpClient.Builder()
.addNetworkInterceptor(interceptor)
.connectTimeout(60, TimeUnit.SECONDS)
.readTimeout(60, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.MINUTES)
|
4. 自定义插件
具体参见官网,包含桌面版本(基于 React),和手机端插件。本质就是互相收发采集或者展示的信息,查看状态。
踩过的坑
- Sonar 居然把 support-v4,okhttp 等库直接打入到 aar,导致 app 不得不去掉本身的 support,okhttp,只能使用 Sonar 内置的版本,这个问题不知道后面会不会解决。
- Sonar so 仅支持 x86,armeabi-v7a,app 中注意假如 armFilter 过滤其他 arch
- 机型兼容性问题,Android4.4无任何提示,Android7.0上可以正常使用,问题待定
经验总结
- 有问题先看看 github 官方 demo 如何处理
- github issue 里面是否有人解决
- 文档仔细查阅+stackoverflow
- google—->百度
- ask 同事、导师、朋友、技术群