Android性能优化之APK(android性能优化实战解析)

Android性能优化之APK} } 这里我们发现减少了大概 200 kb
3. 去除不必要 so 库
通过反编译 Android 微信版本 得知,微信也只适配了 armeabi-v7a 架构,那么我们删掉其

}

}

您将看到此处减少了大约200 kb。

3. 去除不必要 so 库

如果反编译Android微信版本,会发现微信只兼容armeabi-v7a架构。因此,让我们删除对其他库的支持。

安卓{

……

默认配置{

……

NDK {

//设置支持的SO库架构

abi 过滤器“armeabi-v7a”

}

}

}

大约600 kb 已经优化并将继续优化。

4. 去除无用资源 Link 检查(谨慎删除)

概念

Lint是Android Studio提供的代码扫描分析工具,可以帮助您发现代码中的结构和质量问题并提供一些解决方案。此过程消除了手写测试用例的需要。太多的代码迭代很容易让您留下无用的代码和资源文件。您可以使用Lint 清理它们。

怎么使用 Link 检查

打开AS工具并找到未使用的资源以按名称分析运行检查。

优化

继续,我发现链接已优化至700 kb 左右。

注意

链接检查引用以确定资源是否正在使用,因此如果是这种情况,在删除它时应小心。

//动态获取资源ID。如果不直接使用R.xx.xx,则认为该ID代表的资源未使用(同样,反射类也不能混淆)

int indetifier=getResources().getIdentifier(“img_bubble_receive”, “drawable”, getPackageName());

5. 开启混淆

优化了约170万继续进行。

6.移除无用资源 shinkResource

开启ShineResource=true

构建类型{

发布{

minifyEnabled true

收缩资源=true

proguardFiles getDefaultProguardFile(\’proguard-android.txt\’), \’proguard-rules.pro\’

}

调试{

收缩资源=true

minifyEnabled true

proguardFiles getDefaultProguardFile(\’proguard-android.txt\’), \’proguard-rules.pro\’

}

}

由于删除了浪费的资源,该链接可能不再被优化。

7.开启删除无用资源 (严格模式和普通模式) – 这个我这里就不可测试,你们下来可以测试下效果

普通模式也就是自定义模式

如果您有要保留或丢弃的特定资源,请在项目中创建一个包含资源标签的XML 文件,并在tools:keep 属性中指定要保留的每个资源,以及在tools:discard 资源中指定要丢弃的每个资源。这两个属性都接受以逗号分隔的资源名称列表。您可以使用星号字符作为通配符。

例如:

?xml 版本=\’1.0\’ 编码=\’utf-8\’?

将此文件保存在项目资源中(例如res/raw/keep.xml)。构建不会将此文件打包到APK 中。

指定要丢弃的资源可能看起来很愚蠢,因为您所做的只是删除它们,但在使用构建变体时它很有用。例如,如果您知道某些资源表面上在您的代码中使用(因此不会被压缩器删除),但实际上并未在特定的构建变体中使用,则可以将所有资源移动到一个公共项目目录中。它。接下来,为每个构建变体创建不同的keep.xml 文件。还需要构建工具,因为编译器内联添加资源ID,并且资源分析器可能无法区分实际引用的资源和代码中碰巧具有相同资源值的整数值之间的差异可能无法正确识别。

严格模式

一般情况下,Resource Compressor 可以准确判断您的系统是否正在使用资源。但是,如果您的代码调用Resources.getIdentifier() (或者如果您的某个库调用了,AppCompat 库将为您执行此操作),这将导致您的代码根据动态生成的字符串查找资源名称。当您进行此调用时,Resource Compressor 默认情况下会采取防御性行为,将具有匹配名称模式的所有资源标记为可能正在使用且无法删除。

例如,以下代码将所有带有img_ 前缀的资源标记为已使用。

字符串名称=String.format(“img_%1d”, 角度+ 1);

res=getResources().getIdentifier(name, “drawable”, getPackageName());

资源压缩器还会检查代码中的所有字符串常量和各种res/raw/资源,查找file:///android_res/drawable//ic_plus_anim_016.png 形式的资源URL。如果我们发现相似的字符串或可用于构造相似URL 的字符串,我们不会删除它们。

这些是默认启用的安全压缩模式的示例。但是,您也可以覆盖这种“以防万一”的方法,并指定资源压缩器仅保留它确定使用的资源。为此,请在keep.xml 文件中将收缩模式设置为strict,如下所示:

?xml 版本=\’1.0\’ 编码=\’utf-8\’?

如果启用了严格压缩模式,并且您的代码还引用了包含动态生成的字符串的资源(如上所述),则必须使用tools:keep 属性手动保存这些资源。

8. AndResGuard 微信资源压缩方案

什么是 AndResGuard

AndResGuard 是一个减少APK 大小的工具。其原理与Java Proguard类似,但仅针对资源。这缩短了像res/drawable/wechat 到r/d/a 这样的长资源路径。

为什么使用 AndResGuard

以前的开发通常只涉及混淆代码,但资源文件会暴露给其他人,并且res 文件夹中的所有文件名都太可读了。

使用后的效果

AndResGuard 的配置

将插件依赖项添加到项目根目录中的build.gradle 中。

依赖项{

类路径“com.tencent.mm:AndResGuard-gradle-plugin:1.2.16”

}

在应用程序目录中创建and_res_guard.gradle 文件。

应用插件:“AndResGuard”

和ResGuard {

映射文件=空

use7zip=true

使用符号=true

keepRoot=假

压缩文件模式=[

“.png”,

\’.jpg\”,

“.jpeg”,

\’.gif\’,

“资源.arsc”

]

白名单=[

//你的图标

“R.drawable.icon”,

//对于织物

\’R.string.com.crashlytics。\’,

//用于更新umeng

\’R.string.tb_\”,

“R.layout.tb_”,

\’R.drawable.tb_\”,

“R.drawable.u1*”,

“R.drawable.u2*”,

\”R.颜色.tb_\”,

//Sheena 的Umen 分享

\’R.drawable.sina\’,

//对于google-services.json

“R.string.google_app_id”,

\”R.string.gcm_defaultSenderId\”,

“R.string.default_web_client_id”,

\”R.string.ga_trackingId\”,

“R.string.firebase_database_url”,

“R.string.google_api_key”,

“R.string.google_crash_reporting_api_key”,

//乌门

\”R.string.umeng*\”,

\”R.string.UM*\”,

\”R.layout.umeng*\”,

\”R.drawable.umeng*\”,

\”R.id.umeng*\”,

\”R.anim.umeng*\”,

\”R.颜色.umeng*\”,

\”R.style.UM\”,

\”R.style.umeng*\”,

//容云

“R.drawable.u*”,

“R.drawable.rc_”,

\’R.string.rc_\”,

“R.layout.rc_”,

\’R.color.rc_\”,

“R.id.rc_”,

\’R.style.rc_\”,

“R.dimen.rc_”,

“R.array.rc_”

]

七拉链{

神器=“com.tencent.mm:SevenZip:1.2.10”

}

}

在应用程序模块下添加build.gradle 文件。

从:“and_res_guard.gradle”申请

包装后效果图

资源压缩到1M左右

总结

随着项目规模和资源的增加,效果变得更加明显。在使用Link 删除资源之前,您应该小心并进行备份。由于项目本身仅大于10M,所以我最终将其优化为4.5M。这仍然不容易。

好了,这篇文章到这里就结束了。如果您觉得这篇文章写得不错,可以给个赞吗?如果您认为我们有什么可以改进的地方,请留言。我们将仔细检查并纠正任何缺陷。谢谢。

看完本文后,请转发、分享、关注。我们将继续更新技术信息,因此请与我们联系。

转发+点赞+关注,快速获取最新知识点

成为一名Android 架构师的旅程是漫长的。我们一起工作吧!

以下墙裂推荐阅读!!!

Android学习笔记参考(敲黑板!)“寒冬尚未结束”,阿里巴巴P9架构分享Android重要技术点,让你轻松拿offer。毕业三年,我是如何从一个10W的拖拽工程师变成一个30W的高级Android开发者的?腾讯T3专家了解2019年Android发展趋势及关键技术点。拥有8 年Android 开发经验,从程序员到架构师,我们分享技术成长历程,互相鼓励。

最后祝大家生活愉快~

最后

多年来,编辑了解到,大多数入门级和中级Android工程师想要提高自己,往往必须自己探索和成长,这是不系统的、短暂的,我了解到这并没有帮助。

因此,我们收集整理了《2024年Android移动开发全套学习资料》册。最初的目的也很简单。换句话说,我们想帮助那些想学习、提高自己,但不知道从哪里开始的朋友。

由于文件较多,这里仅展示部分目录截图。这套完整的内容包括对领先制造商的采访、学习笔记、源代码讲义、实践项目、概述路线、电子书和教学视频。它将继续更新。

一个人可以走得快,但一群人可以走得更远。无论是IT行业的资深人士还是对IT行业感兴趣的新人。

欢迎任何人加入我们的圈子(技术交流、学习资源、职场投诉、大公司内部推荐、面试指导),让我们一起学习、成长!

如果您需要此信息,请从第 栏中获取。

[正在传输外部链接图像.(img-0fIP4mBU-1719176818094)]

[正在传输外部链接图像.(img-yMPpH9Q5-1719176818094)]

由于文件较多,这里仅展示部分目录截图。这套完整的内容包括对领先制造商的采访、学习笔记、源代码讲义、实践项目、概述路线、电子书和教学视频。它将继续更新。

一个人可以走得很快,但一群人可以走得更远。无论是IT行业的资深人士还是对IT行业感兴趣的新人。

欢迎任何人加入我们的圈子(技术交流、学习资源、职场投诉、大公司内部推荐、面试指导),让我们一起学习、成长!

如果您需要此信息,请从第 栏中获取。

以上关于#Android性能优化APK的相关内容来源网络,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/91902.html

Like (0)
CSDN的头像CSDN
Previous 2024年6月24日
Next 2024年6月24日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注