简介

Matrix是微信终端自研和正在使用的一套APM(Application Performance Management)系统。Matrix-ApkChecke架构r作为Matrix系统的一部分,是针对android安装包的分析检测工html是什么意思具,根据一系列设android是什么系统定好的规则检测apk是否存在特定的问题,并输出较为详细的html是什么意思检测结果报告,用于分析排查问题以及版本追踪。

具体使用可以查看Matrix Android ApkChecker使用文档

Matrix-ApkChecklinux删除文件命令er的功能

Matrix-Apklinux必学的60个命令Checker 当前主要包含以下功能:

  • 读取htmlmanifest的信息

从AndroidManifest.xml文件中读取apk的全局信息,如packageName、versionCode等。

  • 按文件大小排序列出apk中包含的文件

列出超过一定大小的文件,可按文件后缀过滤,并且按文件大小排序

  • 统计方法数

统计dex包含的方法数,并支持将输出结果按照类名(class)或者包名(pacandroid是什么系统kaandroid是什么系统ge)来分组

  • 检查是否经过架构图了资源混淆(AndResGuard)

检查apk是否经过了资源混淆,推荐使用资源混淆来进一步减小apk的大小

  • 搜索不含alpha通道的png文件

对于不含alpha通道的png文件,可以转成jpg格式来减少文件的大小

  • 检查是否包含多个ABI版本的动态库

so文件的大小可能会在apk文件大小中占linux命令很大的比例,可以考虑在apk中只包含一个ABI版本的动态库

  • 搜索未经压缩的文件类型

某个文件类型的所有文件都没有经过压缩,可以考虑是否需要压缩

  • 统计apk中包含linux命令的R类以及R类中的field count

编译之后,代码中对资源的引用都会优化成int常量,除了R.styleable之外,其他的R类其实都可以删除

  • 搜索冗余的文件

对于两个内容完全相同的文件,应该去冗余

  • 检查是否有多个动态库静态链接android手机了STL

如果有多个动态库都依赖了STL,应该采用动态链接的方式而非多个动态库都去静态链接STL

  • 搜索apk中包含的无用资源

apk中未经使用到的资源,应该予以删除

  • 搜索apk中包含的无用assets文件

apk中未经使用的assets文件,应该予以删除

  • 搜索apk中未经裁剪的动态库文件

动态库经过裁剪之后,文件大小通常会减小很多

Mathtml标签属性大全rix-ApkChecker 的linux系统使用

通过matrix配置字符是什么文件的方式使用

下载 Matrix 源码,编译 ma架构设计trix-apk-canary 部分的源码,该项目是一个 java 项目,以下的使用示例采用 matrix 配置文件的方式进行。相比较命令行而言,配linux是什么操作系统置文件比较简单和实用。

我们可以打开 APKChecker.jandroid是什么系统ava文件,替换 Main 函数的架构师和程序员的区别内容为:

    public static void main(String... args) {
         String arr[]= new String[2];
         arr[0]="--config";
         // 配置文件的目录
         arr[1]="/Users/codelang/Desktop/matrix/matrix/matrix-android/matrix-apk-canary/src/main/java/com/tencent/matrix/apk/config.json";
//        if (ages.length > 0) {
            ApkChecker m = new ApkChecker();
            m.run(arr);
//        } else {
//            System.out.println(INTRODUCT + HELP);
//            System.exit(0);
//        }
    }
复制代码

通过ApkChecker.jar运行的方式使用

直接在命令行执行

java -jar ApkChecker.jar
  1. 首先下载ApkChecker.jar,目前linux常用命令最新版本是matrix-apk-canary-2.0.5.jar(点击下载)

  2. 使用命令行运行ApkChecker.jar架构师文件

3.我们可以根据官方文档给的配置文件进行设置,配置文HTML件是一个 .json 文件 :

c字符间距onHTMLfig.json

{
  "--apk":"/Users/codelang/mesh/android-test/app/build/outputs/apk/onLine/release/onLine-release-v1.2.0.apk",
  "--mappingTxt":"/Users/codelang/mesh/android-test/app/build/outputs/mapping/onLine/release/mapping.txt",
  "--output":"/Users/codelang/Desktop/matrix/matrix/matrix-android/matrix-apk-canary/src/main/java/com/tencent/matrix/apk/",
  "--format":"mm.html,mm.json",
  "--formatConfig":
  [
    {
      "name":"-countMethod",
      "group":
      [
        {
          "name":"Android System",
          "package":"android"
        },
        {
          "name":"java system",
          "package":"java"
        },
        {
          "name":"com.tencent.test.$",
          "package":"com.tencent.test.$"
        }
      ]
    }
  ],
  "options": [
    {
      "name":"-manifest"
    },
    {
      "name":"-fileSize",
      "--min":"10",
      "--order":"desc",
      "--suffix":"png, jpg, jpeg, gif, arsc"
    },
    {
      "name":"-countMethod",
      "--group":"package"
    },
    {
      "name":"-checkResProguard"
    },
    {
      "name":"-findNonAlphaPng",
      "--min":"10"
    },
    {
      "name":"-checkMultiLibrary"
    },
    {
      "name":"-uncompressedFile",
      "--suffix":"png, jpg, jpeg, gif, arsc"
    },
    {
      "name":"-countR"
    },
    {
      "name":"-duplicatedFile"
    },
    {
      "name":"-checkMultiSTL",
      "--toolnm":"/Users/codelang/Library/Android/sdk/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin/aarch64-linux-android-nm"
    },
    {
      "name":"-unusedResources",
      "--rTxt":"/Users/codelang/mesh/android-test/app/build/intermediates/symbols/pre/release/R.txt",
      "--ignoreResources"
      :["R.raw.*",
        "R.style.*",
        "R.attr.*",
        "R.id.*",
        "R.string.ignore_*"
      ]
    },
    {
      "name":"-unusedAssets",
      "--ignoreAssets":["*.so" ]
    },
    {
      "name":"-unstrippedSo",
      "--toolnm":"/Users/codelang/Library/Android/sdk/ndk-bundle/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin/aarch64-linux-android-nm"
    }
  ]
}

配置文件有几个地方是需要我们去替换的:

  • –a架构图怎么制作pk : 需要分析的 apk 文件的路径
  • –mappingTxt :mapping.txt 文件
  • –outandroid的drawable类put : 分析后的输android是什么手机牌子出目录
  • –formatConfig 下的 nahtml文件怎么打开me 和Linux pacakge :替换成自己的包名,分析结架构师证书果会统计包名html下类linux系统安装的方法数量
  • –toolnm字符串长度 : 替换成自己 NDK 下对应的文件即可
  • –rTx : apk 文件生成时,对应的 R 文件目录

以上俩个文件准备好以后执行一下咋电脑终端执行以下命令:

java  -jar /(ApkChecker.jar存放路径)/matrix-apk-canary-2.0.5.jar  --config /(apk_config.json文件存放路径)/apk_config.json

例如: java -jar /Us字符串长度ers/xianicai/Desktop/ap字符串逆序输出m/matrix-apk-canary-2.0.5.jar --config /Users/xianicai/Desktop/apm/apk_config.json

运行 Apkchecker.java,会在对应设置的 output目录生成 .json 和 .html 文件

.json 文件看起来会有点麻烦,可以打开 .html 文件进行查看分析结果:

Android性能优化工具-Matrix 之 ApkChecker 使用指南

Android性能优化工具-Matrix 之 ApkChecker 使用指南

实现原理androidstudio安装教程

首先来看下Matrandroid的drawable类ix-ApkChecker的整体工作流程

Android性能优化工具-Matrix 之 ApkChecker 使用指南

各Task作用:

ApkTask

  • ApkTask主要就是具体apk检测项目的执行基类
  • ApkTask实现Callable接口,可以线程池执行得到执行结果TaskResult
  • TaskRelinux重启命令sult最后通过JobResult写入文件
  • ApkTask主要通过TaskFactory集中生成.
  • Apandroid是什么手机牌子kTask相关的结构图

UnzipTask

  • 负责解压apk,读android什么意思取类混淆文件和,资源混淆文件
  • ManifestAnalyzeTlinux常用命令ask
  • 负责Manifest.xml解析工作,主要利用apktool.jar里的 AXmlResourceParser类解析
  • 最后以键值对的形式html代码保存到TaskJsonResult里面

Co字符间距untClassTask

  • 对所有dehtml网页制作x文件进行类分析
  • 解析每一个dex文件,以dex文件linux命令名为基础,解析dex里的包名,包对应的类linux命令的层次去解析
  • 这里注意代码混淆文件的利用字符是什么,获取真正的类名。
  • CountRTask
  • 统计所有R类的数量,和R里面的资源android/yunos数量
  • 解析每一个dex文件,先找到R类(也有可能是资源混淆之后的.R结尾),统计里面的R类字段的数量

DuplicateFileTask

  • 重复文件检测
  • 遍历解压后的文件夹,对每一个文件内容求md5值,md5作android手机为keandroid是什么系统y,文件名集合作为value
  • (感觉可以优化一下字符串长度,没必要对所有文件内容都架构图模板求md5,可以先对比收尾等字节的数据.过滤掉一部分)然后再,通过md5求剩下的文字符串逆序输出

FindNonAlphaPngTask

  • 找到非透明的png文件
  • 主要遍历png 和.9.png文件
  • bufferedImage.getColorModel().hasAlpha()字符间距通过这个函数检测

MethodC架构师和程序员的区别ountTaskhtml是什么意思

  • 解析外部类对应的方法数
  • 解析内部类对应的方法数

MultiLibCheckTask

  • 架构so库Linux检测
  • 主要检测lib文件夹下是否存在多个目录
  • MultiSTLCheckTask
  • 检测so库是否重复引入stl库

ResProguardCheckTask

  • 检测资源是否混淆
  • 检测是否配置资源混淆目录
  • 检测资源文件名称是否混淆过后的,不是混淆的就没用资源混淆

ShowFileSizeTask

  • 统计解压后的目录各个文件条目的大小

UnCompressedFileTask

  • 根据后缀名统计文件大小
  • 可以配置–suffix参数,指定后缀名

UnstrippedSoCheckTask

  • 检测是否剥离so文件的符号表
  • 通过nm命令查看符号表,linux创建文件是否存在符号表

UnusedAssetsTask

  • 查找未使用的asseandroid是什么系统t 文件
  • 先找到所有asset文件存储绝对路径
  • 读取smali代码,查找const-string 声明的字符串,找到asset文件名结尾的assets路径
  • 所有aandroid平板电脑价格ssets文件路径 删除引用的路径 剩下的就是未引用的assets路径

UnusedResourceTask

  • 找到未使用的资源文件
  • 这里思路和UnusedAssetsTask思路一样
  • 就是smali找引用的时候,不仅仅通过const-string声明的变量,还有sget sput,和array-android下载安装data指令去寻找资源id