您的位置 首页 > 中医减肥

Android性能优化APK瘦身详解(瘦身73%)

大家好,如果您还对Android性能优化APK瘦身详解(瘦身73%)不太了解,没有关系,今天就由本站为大家分享Android性能优化APK瘦身详解(瘦身73%)的知识,包括的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

文章的主要内容是从理论出发,然后进入实际操作。分为以下几个方面:1.结构分析,2.具体实操3.总结4.参考资料

1.结构分析

先上传一张减肥前通过Analyze应用分析的图片(打开方法:Android Studio下的——Build——Analyze应用):

APK包结构如下:

lib/:包含特定于处理器软件层的编译代码。该目录包含每个平台的子目录,例如armeabi、armeabi-v7a、arm64-v8a、x86、x86_64和mips。大多数情况下我们只能使用一个armeabi-v7a,原因将在后面讨论。

assets/:包含应用程序可以使用AssetManager 对象检索的应用程序资源。

res/:包含未编译的资源resources.arsc,主要是图片资源文件。

META-INF/:包含CERT.SF和CERT.RSA签名文件以及MANIFEST.MF清单文件。

resources.arsc:包含已编译的资源。该文件包含res/values/文件夹中所有配置的XML 内容。打包工具提取此XML 内容,将其编译为二进制格式,然后归档该内容。此内容包括语言字符串和样式,以及直接包含在resources.arsc 文件中的内容路径,例如布局文件和图像。

classes.dex:包含以Dalvik/ART 虚拟机可以理解的DEX 文件格式编译的类。

AndroidManifest.xml:包含核心Android 清单文件。该文件列出了应用程序的名称、版本、访问权限和引用的库文件。该文件使用Android 的二进制XML 格式。

2、具体实际操作

1、精简lib目录下的文件

1.修改lib配置:

参考

我最终修改后的代码如下:

ndk { //设置支持的so库架构abiFilters 'armeabi-v7a' } 接下来解释一下这样做的依据:

看上面的分析,armeabi-v7主要不支持ARMv5(诞生于1998年)和ARMv6(诞生于2001年)。目前搭载这两款处理器的手机设备基本不在我们公司的适配范围之内(市场份额太小)。

许多基于x86 的设备还可以运行armeabi-v7a 和armeabi NDK 二进制文件。对于这些设备,主要ABI 为x86,辅助ABI 为armeabi-v7a。

最后总结一下:如果适配版本高于4.1版本,可以像我上面那样直接写。当然,如果armeabi-v7a不是设备的主要ABI,那么对性能会有一定的影响。

参考文章:Android app打包时需要兼容armeabi吗?

好吧,我们再次尝试打包。

我真的有点震惊。包的大小突然减少了很多,从87.1M减少到51.9M。让我计算一下缺少多少兆字节。让测试人员帮我测试一下。根据之前的理论知识,我还是感觉有点不确定。果然,测试结果和之前一样。我心里的石头先落了下来。

2.重新编译so文件,替换为较小的库

相信很多开发者都有这样的烦恼。我们导入了很多第三方,只使用了他们的一小部分功能,而大部分功能是我们无法企及的。这时候我们找到源码,提取出我们需要的部分代码,重新编译成一个新的so文件,然后导入到我们的项目中。当然,如果之前没有编译过so文件,建议对这部分做最后的优化。否则你会遇到很多问题。上一波处理后的效果图:

这里说一下,因为项目中使用了ffmpeg库,之前导入的第三方放在assets文件夹中,而重写的so库文件放在lib文件夹中,所以lib文件夹较大。从51.9M到35.6M,效果相当不错。

对了,别问我为什么assets文件夹里有12.6M的资源,因为很多.mp3文件都是第三方人脸识别的必要配置文件,我也很无奈。

2.优化res和assets文件大小

1.手动lint检查和手动删除无用资源

在Android Studio 中打开“分析”并选择“检查代码.”,确定整个项目的范围,然后单击“确定”。配置如下:

2、使用tinypng等图像压缩工具来压缩图像。

打开网址,将大图导入到tinypng中,替换掉之前的图片资源。

3.大部分图片替换为Webp格式。

4. 项目中尽量不要使用帧动画

一帧动画中有几十张图片,无论压缩到什么程度,仍然占据很大比例的内存。所以建议让UI来做。这里可以参考lottie-android。如果项目中有很多动画效果,效果会更明显。当然,这需要我们UI设计师付出很多的努力。

5.使用gradle启用shrinkResources

删除无用的资源文件。这是我的配置:

buildTypes { release { //不显示Log buildConfigField 'boolean', 'LOG_DEBUG', 'false' //混淆minifyEnabled true //删除无用的资源文件shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard - rules.pro'signingConfigsigningConfigs.release } }经过上述步骤后,apk效果如下:

已优化近5M。别问我为什么还有7.5M。有大量gif和webp格式的动画图片,都是UI扔给我的,有2.7M。稍后我会和他详细讨论这个问题。稍后还有两部分要做。一是后台下载资源文件下的所有gif图片。二是和UI讨论如何减小webp动画的大小(我觉得其他平台只有100K,给我吧。就2.7M?)。

3.减小chases.dex的大小

classes.dex 包含所有java 代码。当你打包时,gradle会将所有模板.class文件转换为classes.dex文件。当然,如果方法数量超过64K,则会添加其他文件进行存储。你可以通过multidexing将其分成多个文件,比如我这里的chases2.dex。换句话说,减少代码量。我们可以通过以下方式实现这一目标:

尽量减少对第三方库的引用。上面我们已经对此进行了优化。

避免使用枚举。我特地上网查了一下。详细信息请参考这篇文章。 Android中Enum占用多少内存?如何使用?结论是几十个枚举可能会占用一张图片一样多的内存,优化效果不会特别明显。当然,如果你是一个追求极致的人,我不反对你使用静态常量而不是枚举。

如果你的dex文件太大,检查是否引入了重复功能的第三方库(图片加载库、glide、picasso、fresco、image_loader,如果不是你单独开发的话很容易出现这种情况),试试你的最好用一个库来解决每个功能点。

关于classes.dex文件大小分析,可以参考这个翻译。使用APK 分析器来分析您的APK。

4.其他

删除无用的俚语并用7zip 替换

删除翻译资源,只保留中文和英文

尝试从您的项目中完全删除andorid 支持库。

尝试使用so库文件动态加载和插件开发。

将大型资源文件放置在服务器上,启动后自动下载使用。

三、总结

这篇文章原定于周三发布,但直到今天我才发布。这还是有点懒。最后祝大家五一节快乐,出去玩开心。如果您读了这篇文章,觉得文章写得很好,请点个赞好吗?如果您觉得有什么值得改进的地方,请给我留言。我会仔细检查并改正任何不足之处。谢谢。

4. 参考文献:

文章主要参考了以下几篇文章。文章一小部分参考了后面文章中的句子。如有侵犯作者权益,请联系我,核实后会立即删除。

Android APK瘦身——JOOX音乐项目实践

APK瘦身,如何实现高达53%的压缩效果

使用APK 分析器分析您的APK

Android应用打包时需要兼容armeabi吗?

百度百科webp

Android中Enum占用多少内存?如何使用?

推荐阅读:Android性能优化:内存泄漏无处藏身(图文)

用户评论

孤岛晴空

哇!瘦了73%? 这太酷了!我之前一直觉得安卓手机运行慢这个问题很烦人,现在看到这个方法,我一定要试试看!希望文章里面详细解释一下哪些内容可以优化掉,这样效果是不是会更加显著呢?

    有12位网友表示赞同!

花菲

我一直不知道APK文件里面还有这么多不必要的代码和资源。这篇文章讲得真棒,让我对安卓开发有了更深入的理解!现在想想,很多应用都比以前大了很多,确实是因为这些代码导致的运行慢……

    有7位网友表示赞同!

繁华若梦

我也是个Android开发者,经常面临用户反映软件运行慢的问题,这个优化方法很有用!我打算照着文章里的步骤一步步进行操作,看看能不能提升我的应用程序的用户体验,提高用户的满意度。

    有15位网友表示赞同!

情如薄纱

看到这种瘦身效果我很心动啊!不过73%的比例听起来有些夸张?是不是需要考虑一些应用本身的功能需求,过度压缩可能反而影响某些功能呢?

    有5位网友表示赞同!

南宫沐风

优化APK确实很重要,能提升手机运行速度,延长电池续航时间,但是我担心这个方法应用比较复杂,对于普通用户来说很难操作吧!最好提供一些更直观的工具或者教程,让更多人能够受益。

    有15位网友表示赞同!

执妄

瘦身73%?这篇文章写的不错,内容详细易懂,我已经把文章分享给了我的朋友们,毕竟现在很多手机都是内存有限的。如果还有关于其他方面的性能优化方法,也希望能更新一下这篇博客!

    有16位网友表示赞同!

回忆未来

我有个建议,希望作者可以再出一篇关于如何在使用这个方法的同时保证应用程序的功能完整性的文章,这样就能更加全面地解决用户的实际问题,更有帮助性。

    有13位网友表示赞同!

不浪漫罪名

这种技术应用范围太大了!不仅限于Android开发,我觉得其他平台的应用也可以借鉴使用这种优化技巧,提高用户体验!

    有12位网友表示赞同!

强辩

我以前就觉得Android手机的耗电量有点高,这篇文章提到APK瘦身可以延长电池续航时间,确实很有吸引力!以后得学习一下,看看能不能自己优化的应用程序。

    有15位网友表示赞同!

不相忘

看到这个73%的效率太牛了吧。希望作者别忘记更新一些最新的优化技巧吧。毕竟安卓手机的更新版本越来越多,可能之前的方法效果不那么灵动了,需要根据实际情况进行调整!

    有12位网友表示赞同!

爱到伤肺i

Android的开源特性确实很好,可以让我们更加方便地进行性能优化。不过这篇文章主要针对的是专业开发者,如果能提供一些针对普通人使用的工具或方法,那样就更好了!

    有17位网友表示赞同!

我绝版了i

我是安卓系统小白,看了这篇博客有点懵逼啊!希望作者能用更通俗易懂的语言讲解一下这些技术原理,或者制作一段视频教程,这样更容易理解!

    有14位网友表示赞同!

揉乱头发

我之前就经常被一些占内存过大的应用烦扰,现在看到这个优化方法,真是太激动了!希望能学习到一些技巧,让我的手机运行起来更流畅!

    有9位网友表示赞同!

予之欢颜

APK瘦身确实是一个提高性能的好方法,但需要注意的是过度压缩可能会导致程序崩溃或功能异常。建议在实践过程中循序渐进,测试每个修改的效果,避免出现无法挽回的后果。

    有9位网友表示赞同!

箜明

这篇文章讲解的非常清晰全面,对于想要深入了解Android性能优化的开发者来说是非常有价值的参考文档!

    有20位网友表示赞同!

自繩自縛

安卓手机玩游戏确实会比较吃力,如果能够通过APK瘦身来提升运行效率,那效果肯定很好!希望更多手游开发商也能重视这个问题,提供更加优化流畅的游戏体验!

    有5位网友表示赞同!

怀念·最初

Android的性能优化是一个不断迭代的过程,需要不断学习新的技术和技巧。这篇文章为我们指明了方向,让我们能够更有效地提高手机的运行效率!

    有9位网友表示赞同!

墨城烟柳

我很喜欢这种分享知识的态度,希望作者能够持续更新相关内容,帮助更多人解决安卓性能优化问题!

    有9位网友表示赞同!

本站涵盖的内容、图片、视频等模板演示数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

备案号:滇ICP备2023006363号-22

网站地图