Android性能优化之应用瘦身(APK瘦身)

这篇具有很好参考价值的文章主要介绍了Android性能优化之应用瘦身(APK瘦身)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。

Android性能优化之应用瘦身(APK瘦身),Android性能,android,面试,优化,性能,瘦身

一、导读

我们继续总结学习Android 知识,温故知新。

lint检查代码

二、概览

APK瘦身优化的优先级相对来说是比较低的,因为优化后也并不能明显的看到有什么好处,这一块主要影响转换率,应用越小,
可能用户下载的意愿就越高,另外在进行预装时,也有大小的要求。

一般来说我们可以通过下面几种方式来进行优化:

  • 资源文件:压缩;动态下载。
  • so文件:动态so;不同的架构支持(v7a、v8a)。
  • 源代码:用代码分析工具,去除不再使用的代码;插件化。
  • assets:动态下载;压缩。
  • proguard 混淆代码

2.1 apk组成

直接将apk 拖到android studio窗口,或者我们把apk解压后,能看到下面这些文件

文件 描述
classes(有多个).dex Java Class,被DEX编译后可供Dalvik/ART虚拟机所理解的文件格式
lib 存放so文件,可能有多种架构
assets 程序资源,使用AssetManager来调用
res 资源文件,如:drawable、layout
AndroidManifest AndroidManifest
resources.arsc 编译后的二进制资源文件
META-INF 包含了APK中所有文件的签名摘要等信息

三、优化方向

我们的优化方案,就对应这apk的组成

3.1 源代码

3.1.1 代码混淆

3.1.2 移除无用代码

  1. studio 自带的工具
    Android性能优化之应用瘦身(APK瘦身),Android性能,android,面试,优化,性能,瘦身

  2. 使用CPD/PMD工具
    PMD是一个源代码分析器。它发现常见的编程缺陷,如未使用的变量、空的catch块、不必要的对象创建,等等.
    PMD 网站
    PMD GUI网站:

  3. 使用切面编程的方式进行统计(AOP),确认无用代码。

3.1.3 三方库的处理

统一基础库
统一三方调用的库等等

原则是同样的功能,不要出现多套代码。

3.2 资源文件

  1. 删除冗余资源

  2. 资源混淆

  3. 资源压缩

    • jpg:采取压缩算法,不支持透明通道
    • png:无损压缩,支持透明度
    • webp:无损压缩图像格式,与JPG相比,可大幅减少文件体积

虽然png是无损压缩。但是也有一些网站可以对png图片进行有损压缩,比如tinypng网站

  1. 资源在线化,动态下载
    对于一些比较大,又不是很及时要用的图片,可以考虑从服务端下载。

可以使用下面三种方式找出无用的资源

3.2.1 方式一 Inspect Code

  1. 通过Android Studio 菜单栏 → code → Inspect Code
  2. 在弹出的框框中选择 configure (在右下键)
  3. 在弹出的框框中输入 unused resources(在左上角),勾选对应的选项
  4. 点击开始

如下图
Android性能优化之应用瘦身(APK瘦身),Android性能,android,面试,优化,性能,瘦身

这里的选项实在是很多,我们只找出未使用的资源文件,最好先将其他的选择全取消,然后在勾选 unused resources
Android性能优化之应用瘦身(APK瘦身),Android性能,android,面试,优化,性能,瘦身

这时候就开始分析项目了,我们耐心等待一会
Android性能优化之应用瘦身(APK瘦身),Android性能,android,面试,优化,性能,瘦身

3.2.2 方式二

菜单栏 → Refactor → Remove Unused Resources
Android性能优化之应用瘦身(APK瘦身),Android性能,android,面试,优化,性能,瘦身

这样直接就开始删了,当然要检查下,不要误删。

3.2.3 方式三 腾讯的 Matrix

Matrix是微信终端自研和正在使用的一套APM(Application Performance Management)系统。
Matrix-ApkChecker 作为Matrix系统的一部分,是针对android安装包的分析检测工具,根据一系列设定好的规则检测apk是否存在特定的问题,
并输出较为详细的检测结果报告,用于分析排查问题以及版本追踪。Matrix-ApkChecker以一个jar包的形式提供使用,
通过命令行执行 java -jar ApkChecker.jar 即可运行。

也可以配置一下

java -jar matrix-apk-canary-2.1.0.jar --config CONFIG-FILE-PATH

matrix git 搜索APK Checker,这里有个下载链接,点击下载jar包。

Matrix apkchecker 文档

CONFIG.json文件,也可以之间用官网的,最终会生成两个文件,之间查看即可

{
  "--apk":"E:\\release.apk",
  "--mappingTxt":"E:\\mapping.txt",
  "--output":"E:\\",
  "--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":"-unusedResources",
      "--rTxt":"E:\\R.txt",
      "--ignoreResources"
      :["R.raw.*",
        "R.style.*",
        "R.attr.*",
        "R.id.*",
        "R.string.ignore_*",
        "R.dimen.*",
        "R.string.*",
        "R.color.*"
      ]
    },
    {
      "name":"-unusedAssets",
      "--ignoreAssets":["*.so" ]
    }
  ]
}

通过这种方式,我们回得到一个html分析的结果表格,但是我们看到的都是混淆过到资源文件,这时 可以使用 aapt2 来输出apk资源表的内容(resources.arsc文件):

aapt2 dump resources xxx.apk > logx.txt

3.2.4 资源混淆

3.3 so瘦身

动态so;
指定架构支持(如v7a、v8a);

另外还可以只保留一个cpu架构,别的cpu架构自动适配,程序运行过程中,通过判断cpu架构选择合适的so

if(v7a) {
    xxx
} else {
    xxx
}

还有就是插件化,这个是一个专题,我们在另外的文章里面讲。

四、 推荐阅读

Java 专栏

SQL 专栏

数据结构与算法

Android学习专栏

Android性能优化之应用瘦身(APK瘦身),Android性能,android,面试,优化,性能,瘦身文章来源地址https://www.toymoban.com/news/detail-708947.html

到了这里,关于Android性能优化之应用瘦身(APK瘦身)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android UI性能优化 检测应用中的UI卡顿

    } }; public static LogMonitor getInstance() { return sInstance; } public boolean isMonitor() { return mIoHandler.hasCallbacks(mLogRunnable); } public void startMonitor() { mIoHandler.postDelayed(mLogRunnable, TIME_BLOCK); } public void removeMonitor() { mIoHandler.removeCallbacks(mLogRunnable); } } 我们利用了HandlerThread这个类,同样利用了Loope

    2024年04月14日
    浏览(41)
  • Android中的Apk 包体优化

    在Android中,APK包体优化指的是减小应用程序的安装包大小,以降低用户下载和安装应用的成本,提高用户体验。APK包体优化对于应用的性能、启动速度和用户留存率都有着重要的影响。下面展开说说一些常见的APK包体优化策略: 压缩资源文件:使用工具对应用中的资源文件

    2024年02月14日
    浏览(35)
  • Android 10.0 开机启动时PMS扫描apk耗时相关功能优化

      在android10.0的系统rom定制化开发中,在系统中开发产品时,会根据客户要求内置第三方app,这时如果内置app过多,或者安装的app过多,在系统开机的过程中 在pms扫描安装app的时候,就会比较耗时,这时候就需要优化下pms扫描安装app这块的功能代码,用多线程来实现pms扫描安装

    2024年02月04日
    浏览(58)
  • android应用市场点击下载APK安装详解

    1,《android系统启动流程简介》 2,《android init进程启动流程》 3,《android zygote进程启动流程》 4,《Android SystemServer进程启动流程》 5,《android launcher启动流程》 6,《Android Activity启动过程详解》 1,《Android 源码下载和编译》 2,《android 11源码编译和pixel3 刷机》 3,《Andro

    2024年02月16日
    浏览(39)
  • ()Android apk应用加固、字节对齐、二次签名全流程

    这篇博客主要是讲如何对apk应用进行加固、对齐和签名的,会有详细的步骤逐一介绍 随着各大加固工具都开始逐一收费后,个人开发中或者中小型企业如何对应用进行加固就成了一个问题。以前我常用的是360加固助手,虽然每天限制一定的免费次数,但起码能用。 可是最近

    2024年01月17日
    浏览(42)
  • adb命令导出手机已安装的android应用apk文件

    前提条件是手机已经和PC电脑可以通过adb建立连接。 (1)通过adb shell命令获取当前手机所有已经安装的应用包名:   (2)根据上面打印出来的包名,找到想要导出apk文件的应用包名,这个包名可以通过多种方式找到,也可以用一些工具找,假设已经知道某个应用的包名后,

    2024年02月16日
    浏览(59)
  • flutter开发实战-打包应用apk签名及Android studio没有generate signed bundle/apk问题修改

    flutter开发实战-打包应用apk签名及Android studio没有generate signed bundle/apk问题修改 最近使用flutter开发项目,需要将打包应用时候apk进行签名,我这边开发使用的是Android studio,发现在Android studio的build没有generate signed bundle/apk。这里记录一下问题修改,以及生产签名文件及gradle配置

    2024年02月08日
    浏览(53)
  • Android 性能优化系列:启动优化进阶

    应用的速度优化是我们使用最频繁,也是应用最重要的优化之一,它包括启动速度优化、页面打开速度优化、功能或业务执行速度优化等等,能够直接提升应用的用户体验。 大部分人谈到速度优化,只能想到一些零碎的优化点,比如使用多线程、预加载等等,没有一个较为体

    2024年02月13日
    浏览(37)
  • Android 性能优化——APP启动优化

            首先在《Android系统和APP启动流程》中我们介绍了 APP 的启动流程,但都是 FW 层的流程,这里我们主要分析一下在 APP 中的启动流程。要了解 APP 层的启动流程,首先要了解 APP 启动的分类。 冷启动         应用从头开始启动,即应用的首次启动。需要做大量的工

    2024年04月12日
    浏览(44)
  • Android性能优化系列篇(二):启动优化

    汇总了一下众多大佬的性能优化文章,知识点,主要包含: UI优化/启动优化/崩溃优化/卡顿优化/安全性优化/弱网优化/APP深度优化等等等~ 本篇是第二篇:启动优化!  [非商业用途,如有侵权,请告知我,我会删除] 强调一下: 性能优化的开发文档跟之前的面试文档一样,想要的

    2023年04月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包