前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android资源大小检查测试方案

Android资源大小检查测试方案

作者头像
测试加
发布2022-03-24 16:04:00
6660
发布2022-03-24 16:04:00
举报
文章被收录于专栏:用户4624600的专栏

前言

每个版本专项测试都需要记录apk的总大小值,然后对比每个版本的包大小总值,这个总大小对于开发并没有什么实际价值,因为不够细化apk中各种资源的大小.

比如dex、so、图片资源各自占比、是否有重复资源、是否有图片未压缩等.

如果能每个版本检查出上述问题并提出优化建议,那么在持续集成中价值就比较大.

编译打包过程

打包过程.png

  • 根据res目录下的资源文件、AndroidManifest.xml生成R.java文件
  • 处理aidl,生成对应的java文件,如果没有aidl,则跳过
  • 将前两步生成的java文件和src目录下源码一起编译成class文件
  • 通过class文件生成成dex文件
  • 将资源文件和dex文件一起打包,生成初始apk
  • 对初始apk签名

资源组成

dex

Android开发编写的是.java代码,Android在运行时用的是dalvik虚拟机,而dalvik虚拟机只能运行.dex文件.

dex文件的加载是通过DexClassLoader、PathClassLoader等类来完成的.

通过Android Studio分析下dex文件,共有6个dex文件.

image

出现多个dex文件,是因为做了dex分包.每个dex要求方法数不能超过65536上限.

.so

.so文件是NDK编译出来的,项目中使用RenderScript支持库,OpenCV,Unity,android-gif-drawable,SQLCipher等,已经在生成的APK文件中包含.so文件了.

这里提到了NDK工具,NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.

.png

.png是常见的资源文件,在Android项目中路径是res文件路径下.

.js

现在多数app的是混合模式开发,通常会内置一些常用js文件,使用的时候从本地使用js文件,减少网络请求js文件并且提高web页面的响应时间.

.xml

.xml文件是配置icon展示的颜色和大小等参数.

.mp4

有些app在首页安装会播放一段介绍视频,会内置一份.mp4文件到app中.

分析过程

使用微信最近开源的项目Matrix-ApkChecker工具,以下是ApkChecker工具的原理和分析过程

原理

image

执行过程

image

使用

请参考:https://github.com/Tencent/matrix/wiki/Matrix-ApkChecker#matrix-apkchecker-的使用

在git上下载matrix-apk-canary-0.4.10.jar.

简单使用命令如下:

代码语言:javascript
复制
java -jar matrix-apk-canary-0.4.10.jar --apk apk路径

使用配置文件命令如下:

代码语言:javascript
复制
java -jar matrix-apk-canary-0.4.10.jar -apk apk路径 --config 配置文件路径

配置文件太长就不帖子了,基本上和官方教程是一样的.

执行完命令之后,会生成html和json两个文件.

image

自动化执行

自动化脚本

把上述执行jar包的操作封装成python脚本.

优化报告

优化下报告,因为原生的报告数据很多并且描述都是英文的. 开发同学看到这些并不能直观的看出问题.所以做了优化报告.

image

上传结果

报告生成到本地后,把报告上传给后端保存,在测试平台展示并且生成对比图.

image

执行策略

包检查是一种低频率测试,每天执行一次即可.

优化建议

重复代码

当然重复代码是可以从代码扫描的角度发现,减少重复代码也可以达到包瘦身的效果.

未使用的资源文件

资源文件没有被真正引用到

重复的资源文件

资源目录下有两个一样的文件,根据对比文件md5

图片格式

webp格式比png、jpg体积小

项目地址

已经把Matrix-ApkChecker加入到monkey测试脚本中

项目地址:https://github.com/xinxi1990/maxauto

代码语言:javascript
复制
cd checker
python run.py apk_path mail_list(多个人逗号分隔)

参考

原理介绍 https://mp.weixin.qq.com/s/tP3dtK330oHW8QBUwGUDtA

github地址 https://github.com/Tencent/matrix/wiki/Matrix-ApkChecker

Android中的dex、apk、ClassLoader详解 https://blog.csdn.net/u014606081/article/details/71555405

Android NDK开发(一) 入门 https://www.jianshu.com/p/0261e6cceb3e

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试加 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 编译打包过程
  • 资源组成
    • dex
      • .so
        • .png
          • .js
            • .xml
              • .mp4
              • 分析过程
                • 原理
                  • 执行过程
                    • 使用
                      • 自动化执行
                        • 自动化脚本
                        • 优化报告
                        • 上传结果
                        • 执行策略
                    • 优化建议
                      • 重复代码
                        • 未使用的资源文件
                          • 重复的资源文件
                            • 图片格式
                            • 项目地址
                            • 参考
                            相关产品与服务
                            持续集成
                            CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档