Apk体积检测 - ApkChecker的使用

9 篇文章 0 订阅
5 篇文章 0 订阅

Apk体积优化一直是迭代中的不可忽略的问题, 这次要说的是apk体积的检测方法, 毕竟优化都是基于检测的;

当然, 在Android Studio中有Apk Analyser工具可以使用, 但是需要导出, 或者在每个版本迭代中生成报告, 手动生成apk后拖入也是比较麻烦的; 使用Matrix 提供的工具 ApkChecker可以独立检测apk并生成报告, 下面介绍下打包检测过程; 

1.下载ApkChecker.jar

https://download.csdn.net/download/qq_23992393/86871532

独立的工具jar包, 需要java环境可用

2. 命令封装

如果想查看支持的命令说明, 可以运行:

java -jar matrix-apk-canary-2.0.8.jar 

一般项目中会通过配置文件方式设置, 直接看下demo中的设置:

2.1 目录:

独立将几个需要的文件独立到一个文件夹中,便于移动管理

 

matrix_apk_checker_config.json:

{
  "--apk":"[项目apk目录]",
  "--mappingTxt":"[项目mapping.txt目录]",
  "--output":"apk-checker-result",
  "--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/hanlonglin/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-nm"
    },
    {
      "name":"-unusedResources",
      "--rTxt":"[项目package-aware-r.txt或R.txt目录]",
      "--ignoreResources"
      :["R.raw.*",
        "R.style.*",
        "R.attr.*",
        "R.id.*",
        "R.string.ignore_*"
      ]
    },
    {
      "name":"-unusedAssets",
      "--ignoreAssets":["*.so" ]
    },
    {
      "name":"-unstrippedSo",
      "--toolnm":"/Users/hanlonglin/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-nm"
    }
  ]
}

对应的目录填写自己项目中的目录即可, 不然会提示xxx is not legal!

matrix_apk_checker.sh:

cd $(cd `dirname $0`; pwd)
java -jar matrix-apk-canary-2.0.8.jar --config matrix_apk_checker_config.json

执行文件作用: 

1.定位到当前目录

2.执行真正的apkChecker命令

2.2 使用

命令行输入: 

./matrix_apk_checker.sh 

第一次会提示权限不足 执行:

chmod +x matrix_apk_checker.sh

然后在执行上一条命令即可;

2.3 生成报告: 

命令运行以后, 会在目录下生成 apk-checker-result.html 和 apk-checker-result.json

检测的信息主要包含如下信息:

  • 读取manifest的信息

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

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

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

  • 统计方法数

统计dex包含的方法数,并支持将输出结果按照类名(class)或者包名(package)来分组

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

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

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

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

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

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

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

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

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

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

  • 搜索冗余的文件

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

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

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

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

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

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

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

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

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

部分截图如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龍林1102

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值