大家好,今天给各位分享Android应用程序性能提升与APK文件压缩攻略汇总的一些知识,其中也会对进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
. asserts . lib . res . dex . META-INF . androidManifest这几个部分构成的。 通常来说我们可以AndroidStudio自带的Analyze APK工具进行APK的资源分析进行我们的瘦身工作,关于工具的使用请参考视频 我们的瘦身也是通过分析APK的组成部分后进行操作,注意,重点来了,下面说说我对瘦身方案的理解,拿出你的小本本记录起来吧~
代码瘦身
代码混淆
道在开发过程中往往为了开发方面,我们通常不会开启混淆措施,一旦到了线上后,我们不管为了APK安全还是瘦身,都建议开启混淆措施
开启混淆很简单,在build.gradle文件中配置minifyEnable true即可。
buildTypes { release { minifyEnabled true//true开启混淆配置,false关闭 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.duqian_android_keystore } }混淆的具体措施,需要在proguard-rules.pro文件中进行操作。 常见的混淆配置如下:
-dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -verbose -ignorewarnings -dontshrink -optimizationpasses 5 //指定代码的压缩级别 -dontusemixedcaseclassnames //包明不混合大小写 -dontusemixedcaseclassnames //包明不混合大小写 -dontskipnonpubliclibraryclasses //不去忽略非公共的库类 -dontoptimize //优化 不优化输入的类文件 -keepattributes *Annotation* //保护注解 -keep public class * extends android.app.Fragment // 保持哪些类不被混淆 -keep public class * extends android.support.v4.app.Fragment //如果有引用v4包可以添加下面这行三方库处理
在开发过程中,我们因为业务需求,可能会引用很多第三方库,而这些库可能有着相同功能 比如Picasso和Glide,这两个库都是图片加载的功能,如果没有特殊要求的话,根据场景的选择任选其一即可。
- 当然,本着瘦身的原则,我们通常选择一个 包体积更小 的较好。
- 对于第三方库的管理,通常建议封装一个 统一管理三方库的基础库 ,这样有利于后期库的维护
- 如果我们需要某个库的某小部分功能,那么建议就是 仅引入所需部分功能代码 即可,加入我们使用了Picasso,但是我们只需要它支持webp功能,那么这时候我们就只引入webp功能就好了 原则就是 能小则小,不用最好
移除无用代码
通常是伴随着业务的不断迭代,业务代码只加不减,还有越来越多的代码不敢删除,这个时候我们就需要对每个页面用户的访问情况进行监测,通常我们可以通过使用埋点技术来对页面的生命周期进行埋点,比如对Activity的onCreate进行埋点,Fragment的构造进行埋点,可以通过类似的手段来分析用户操作行为,这样可以更好进行业务的优化。 随便提一句,使用AOP埋点超好
资源瘦身
冗余资源
1000行代码可能占用5KB的资源,但是100张图片可能就是上百Kb的资源
可见对资源的一个优化是多么的重要,那么就需要删除一些冗余资源,操作如下:
资源文件右键-->Refactor-->Remove Unused Resource
图片处理
图片压缩就不过多的说了,推荐tinypng和TinyPngPlugin,
资源混淆
没什么好说的,大家看下AndResGuard,主要是将冗长的资源文件路径缩短,从而达到一个节省资源的目的。
SO瘦身
SO,简单的说就是Android上的一个动态链接库,关于SO的操作,请进行JNI相关资料进行查阅
我们都知道,在Android中有7类CPU架构,对应的ABI:
如果说将这些SO都加载进来,势必会造成APK的体积膨胀,因此需要通过一些手段来解决
SO移除
在build.gradle的defaultConfig配置中添加下面的代码
ndk { abiFilters "armeabi-v7a" //目前流行的armeabi和armeabi-v7a }当然这样做,也有缺陷,可能部分用户因为无法加载so库,从而导致用户体验差
如果说我们需要完全的支持所有设备机型,那么付出的代价真的太大了,此时我们可能通过动态加载的方式来解决
动态加载SO
- 将所有的so文件都放到armeabi文件夹下,通过获取用户的CPU架构进行动态加载
- 可以将需要的so文件上传到服务器,然后先获取用户的CPU架构,再从服务器上下载对应的so文件进行加载
- 通过插件化插拔的方式进行下发
用户评论
真不错!我一直想学习一下如何优化 Android 应用程序的性能,这个教程正好可以帮到我。那些解释清晰易懂,特别是关于 APK 瘦身的技巧,太有用了!
有7位网友表示赞同!
终于找到一篇靠谱的优化教程了,以前总是看一堆乱七八糟的信息。作者讲得头头是道,感觉比很多书还要实用。我要好好把这个笔记消化一下,看看能不能让我的小项目跑得更快.
有7位网友表示赞同!
看完这篇文章,我终于明白什么叫 APK 瘦身了,原来还有这么多方法可以优化APK的大小。赶紧试一试看效果,希望能够提升我的应用的启动速度!
有10位网友表示赞同!
这个教程讲得很详细,每个环节都有具体的操作步骤,非常实用。我已经在我的项目中尝试了一些方法,感觉确实有提升!不过对于一些比较复杂的优化技巧,我还是需要慢慢学习。
有17位网友表示赞同!
虽然我是一个 Android 开发小白,但我觉得这篇教程还是很容易读懂的。那些基本知识讲解得很清楚,比如代码压缩、图片优化的步骤都简单易懂,非常适合入门学习。
有18位网友表示赞同!
这篇文章太棒了!我最想优化的就是 APP 的启动速度和内存占用。经过阅读指南之后,终于找到了合适的技巧可以解决这些问题。感谢作者的分享!
有16位网友表示赞同!
APK 瘦身确实很重要,我之前一直把这个放到最后来处理,导致我的应用体积比较大。看完这篇文章,我要调整一下自己的开发思路,从一开始就考虑优化。
有14位网友表示赞同!
我觉得有些东西解释得不够详细,比如关于动态库的优化方法,我只看到了寥寥数语,希望作者能给出更具体的步骤或者示例。
有18位网友表示赞同!
这个教程的重点在于实践操作,有很多实用技巧可以学习。我尝试了几条建议,确实让我的程序运行速度加快了不少。很棒!
有17位网友表示赞同!
说实话,我觉得这篇博客比较注重入门级的知识点讲解。对于一些高级的性能优化技巧,可能需要参考其他更专业的资料。
有15位网友表示赞同!
作者分享的一些代码片段还是很有帮助的,尤其是关于代码冗余部分清理的方法,很希望后续能看到更多实操性的例子。
有14位网友表示赞同!
我尝试用一些工具来进行 APK 瘦身操作,但是效果并不理想。我希望这篇教程能够提供更详细的工具使用技巧或者推荐一些适合我的工具。
有11位网友表示赞同!
我对 Android 的性能优化一直很感兴趣,这篇文章让我了解到了很多新的知识点,特别是关于资源压缩和代码优化的技巧,很有收获。
有8位网友表示赞同!
学习 Android 应用开发已经有一段时间了,但还是在不断探索如何提升应用的性能。这篇教程为我提供了很多新思路,特别是那些关于平台组件优化的介绍,让我对这方面的知识有了更深入的理解。
有7位网友表示赞同!
我觉得文章中提到的部分工具并不常见于我的工作环境,希望能提供更多的常用的工具和操作步骤,这样对于开发人员来说更加实用。
有16位网友表示赞同!
作者把一些Android性能优化技巧总结得非常清晰简洁,而且能够通过简单的描述让读者理解其背后的原理。这篇文章对我提高 Android 开发水平很有帮助!
有10位网友表示赞同!
希望未来作者能多更新一些最新 Android 优化知识和技巧,因为这个领域一直在发展变化,需要不断学习才能跟上步伐。
有17位网友表示赞同!
总体来说,这篇文章内容丰富,讲解清晰,对于想了解Android性能优化的开发人员来说非常实用。 但我个人认为,除了理论部分,更希望能看到一些实际项目的案例分析和解决方案分享,这样能让读者更加直观地理解这些概念和技巧的应用。
有5位网友表示赞同!