微信自研APM利器Matrix正式开源

开源最前线(ID:OpenSourceTop) 

近日,微信正式宣布,开源 APM 利器 Matrix



目前,Matrix 在 GitHub 上已经获得 1326 个Star,123 个Fork。(GitHub地址:https://github.com/Tencent/matrix


Matrix 是一款微信研发并日常使用的 APM (Application Performance Manage) ,当前主要运行在 Android 平台上。



Matrix 当前监控范围包括:应用安装包大小,帧率变化,启动耗时,卡顿,慢方法,SQLite 操作优化,文件读写,内存泄漏等等。


APK Checker:针对 APK 安装包的分析检测工具,根据一系列设定好的规则,检测 APK 是否存在特定的问题,并输出较为详细的检测结果报告,用于分析排查问题以及版本追踪


Resource Canary:基于 WeakReference 的特性和 Square Haha 库开发的 Activity 泄漏和 Bitmap 重复创建检测工具


Trace Canary:监控界面流畅性、启动耗时、页面切换耗时、慢函数及卡顿等问题


SQLite Lint:按官方最佳实践自动化检测 SQLite 语句的使用质量


IO Canary:检测文件 IO 问题,包括:文件 IO 监控和 Closeable Leak 监控


下面,我们再来了解一下Matrix的使用方法


1、在你项目根目录下的 gradle.properties 中配置要依赖的 Matrix 版本号,如:


  MATRIX_VERSION=0.4.7


2、在你项目根目录下的 build.gradle 文件添加 Matrix 依赖,如:


    repositories {
    maven {
      url "https://dl.bintray.com/matrix/maven/"
    }
  }

  dependencies {
      classpath ("com.tencent.matrix:matrix-gradle-plugin:${MATRIX_VERSION}") { changing = true }
  }


3、接着,在 app/build.gradle 文件中添加 Matrix 各模块的依赖,如:


 dependencies {
    implementation group"com.tencent.matrix", name: "matrix-android-lib", version: MATRIX_VERSION, changing: true
    implementation group"com.tencent.matrix", name: "matrix-android-commons", version: MATRIX_VERSION, changing: true
    implementation group"com.tencent.matrix", name: "matrix-trace-canary", version: MATRIX_VERSION, changing: true
    implementation group"com.tencent.matrix", name: "matrix-resource-canary-android", version: MATRIX_VERSION, changing: true
    implementation group"com.tencent.matrix", name: "matrix-resource-canary-common", version: MATRIX_VERSION, changing: true
    implementation group"com.tencent.matrix", name: "matrix-io-canary", version: MATRIX_VERSION, changing: true
    implementation group"com.tencent.matrix", name: "matrix-sqlite-lint-android-sdk", version: MATRIX_VERSION, changing: true
  }

  apply plugin: 'com.tencent.matrix-plugin'
  matrix {
    trace {
        enable = true    //if you don't want to use trace canary, set false
        baseMethodMapFile = "${project.buildDir}/matrix_output/Debug.methodmap"
        blackListFile = "${project.projectDir}/matrixTrace/blackMethodList.txt"
    }
  }


4、实现 PluginListener,接收 Matrix 处理后的数据, 如:


  public class TestPluginListener extends DefaultPluginListener {
    public static final String TAG = "Matrix.TestPluginListener";
    public TestPluginListener(Context context) {
        super(context);

    }

    @Override
    public void onReportIssue(Issue issue) {
        super.onReportIssue(issue);
        MatrixLog.e(TAG, issue.toString());

        //add your code to process data
    }
}


5、实现动态配置接口, 可修改 Matrix 内部参数. 在 sample-android 中 我们有个简单的动态接口实例DynamicConfigImplDemo.java, 其中参数对应的 key 位于文件 MatrixEnum中, 摘抄部分示例如下:


public class DynamicConfigImplDemo implements IDynamicConfig {
    public DynamicConfigImplDemo() {}

    public boolean isFPSEnable() return true;}
    public boolean isTraceEnable() return true; }
    public boolean isMatrixEnable() return true; }
    public boolean isDumpHprof() {  return false;}

    @Override
    public String get(String key, String defStr) {
        //hook to change default values
    }

    @Override
    public int get(String key, int defInt) {
      //hook to change default values
    }

    @Override
    public long get(String key, long defLong) {
        //hook to change default values
    }

    @Override
    public boolean get(String key, boolean defBool) {
        //hook to change default values
    }

    @Override
    public float get(String key, float defFloat) {
        //hook to change default values
    }
}


6、选择程序启动的位置对 Matrix 进行初始化,如在 Application 的继承类中, Init 核心逻辑如下:


Matrix.Builder builder = new Matrix.Builder(application); // build matrix
  builder.patchListener(new TestPluginListener(this)); // add general pluginListener
  DynamicConfigImplDemo dynamicConfig = new DynamicConfigImplDemo(); // dynamic config

  // init plugin 
  IOCanaryPlugin ioCanaryPlugin = new IOCanaryPlugin(new IOConfig.Builder()
                    .dynamicConfig(dynamicConfig)
                    .build());
  //add to matrix               
  builder.plugin(ioCanaryPlugin);

  //init matrix
  Matrix.init(builder.build());

  // start plugin 
  ioCanaryPlugin.start();


现在,Matrix就已成功集成到你的项目中,并且开始收集和分析性能相关异常数据,感兴趣的可以到GitHub详情页看看。

推荐↓↓↓
开源最前线
上一篇:霸榜GitHub Trending!这个Python程序大全要火 下一篇:2018年12月份GitHub上最热门的开源项目