APK体积优化的一些总结,20道Android工程师面试必问题

//5.0的兼容适配

//5.0以下 将svg图片生成指定维度的png图片,下面写几个就会生成几个相应的图片

vectorDrawables.generatedDensities(‘xhdpi’,‘xxhdpi’)

//5.0以上 以上使用support-v7进行兼容

vectorDrawables.useSupportLibrary = true

这个是我找到的解决方案,但是我编译了一下试了试。如果我单写顶上那一句,会在相应的文件夹下生成出图片,但是加上后面这句,相应的图片就没有了!我就好奇了,为什么呢?然后我找到了相应的手机试了一下,加不加上面这句没有什么卵用!我是在19版本上测试的!找这样的手机真心费劲,要不是我父母我还真找不到!!!所以呢?大家斟酌一下吧!!!

这个问题,大神们早就帮我们解决了!!!

下面这个是一个批量转换工具!话说没有什么事情能难倒程序员!!!(对我失效)

MegatronKing/SVG-Android

下载这个jar包->svg2vector-cli-1.0.1.jar

然后一波小命令!!!咔咔咔

java -jar svg2vector-cli-1.0.1.jar -d D:\svg -o D:\vector

-d 指定svg文件所在目录

-f 指定当个svg文件

-h 设置转换后svg高

-w 设置转换后svg宽

-o 输出android vector图像目录

然后转换完成,然后复制就好了!!!

2. Tint着色器的使用与优化

大家在开发的时候不知道有没有过这种体验!在使用状态选择器的时候,需要使用两张一样颜色不同的相同图片?其实使用tint属性完全可以搞定(但是这里指的是纯色的那种图片,那种花花绿绿的你还是乖乖弄吧,除非你想把他变成纯色!)

其实真的很简单,只要在展示的图片中添加

app:tint=“颜色值”

这样就可以改变图片的颜色,那么状态选择器呢?怎么用呢?其实很简单了!下面我们来看代码!

先来看看两个状态选择器的代码:

<?xml version="1.0" encoding="utf-8"?>

可能你会奇怪了,为什么两个图片是一样的?看到后面你就懂了!

<?xml version="1.0" encoding="utf-8"?>

其实原理是这样的,状态选择器的话呢?只要你通过tint的状态选择器改变图片的颜色就可以了!

但是这里面有几个点需要注意下:

  1. 颜色的那个状态选择器要方法color文件夹下;

  2. 设置tint的时候要使用app为前缀,否则5.0以下的会报错;

  3. 如果你设置的是svg的图片要使用srcCompat如果是正常图片使用src就好了。

基本上这层优化就到这里了!

3. 资源打包配置优化

其实这个标题说的有点大,其实就是删除不必要的语言!!!

可能你们没有留意过,在你用Android Studio查看你的apk的时候,会看到这样的东西!

效果图

在我画框的地方,有很多中语言的使用?你会好奇的问?我没有设置过语言啊?这都从哪里跑出来的呢?其实实在v7包中的!其实我们一般的应用不会涉及到这些语言的!所以我们只留下其中的一种或几种就可以了。具体怎么做呢?其实就只有一行代码。。。

在app的build.gradle中的defaultConfig中添加这样一句就可以了!

resConfigs(‘zh-rCN’')

这里其实你还可以添加多个,直接用逗号连接就可以了!

优化后就变成下面这个样子了!!!

效果图

4. 动态库的打包配置

其实说到动态库的话,基本上就是.so引入的动态库,其实这里有很大的优化空间!其实你可以解压比较大型的项目,其实没有那么多so文件的类型!

平时我们开发的时候,基本上都是这么写的!

sourceSets{        main{            jniLibs.srcDirs = [‘libs’]        }    }

然后

ndk{        abiFIlters(‘armeabi’,‘armeabi-v7a’,‘xxx’…)    }

是不是每次像导入百度语音等第三方库的时候,说明文档上这么写的我们也就这么弄的!但是其实我们不需要这么多的架构!

这里简单说一下常用的几个

armeabi 真机

x86 模拟器

其实我们真是开发的话,直接使用armeabi就可以了,如果你做那种定制化的apk的话,把其它的加上还可以,但是如果正常的手机应用的话,这里只需要armeabi的就可以了!

如果你怎么不知道用哪个?你把比较大的项目解压一下看看人家用哪个你就用哪个!哈哈

5. 移除无用的资源(物理与非物理删除)

5.1 物理删除(无法找回,慎用)

关于物理删除其实很多都不建议这么使用,因为这个真的没有什么节操!这里说两个问题:

  • 如果你们项目没有项目管理的话,真的不建议这么使用,因为删除之后你真的找不到了!是真的找不到了(如果git的话,拉个分支使劲磕就可以)!
  • 如果有反射或者动态加载id的(ids.xml)的会直接删除!可能会报错!

好了,前提说好了!别到时候后删了之后找我。。。

方案一:

Refactor->Remove Unused Resource…

这里会谈个框,会有三个选项:

  • (Refactor)第一个是直接删除了

  • (Preview)第二个会在下面弹出一个提醒,让你选择性的删除

  • (Cancel)取消

方案二:

Analyze->Run Inspection by name

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

起的朋友,同时减轻大家的负担。**
[外链图片转存中…(img-PtObRRsC-1710922722105)]
[外链图片转存中…(img-NRBcnvQU-1710922722106)]
[外链图片转存中…(img-U6Oz3CpW-1710922722106)]
[外链图片转存中…(img-UrzHJttG-1710922722107)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-PiAYa5ie-1710922722107)]

  • 22
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值