android安装包极致优化

1.矢量图

可缩放向量图形(Scalable Vector Graphics,SVG)是一种基于可扩展标记语言(XML),用于描述二维向量图形的图形格式。SVG由W3C制定,是一个开放标准。
1,SVG何以可以任意缩放而不会失真,drawable-(m|h|xh|xxh|xxxh)dpi和mipmap-(m|h|xh|xxh|xxxh)dpi这俩货就可以省省了;
2,SVG文件一般都比较小,省去很去资源达到apk缩包的目的;
3,SVG占用内存非常小,性能高。但是SVG明显的缺点是没有位图表达的色彩丰富。
首次怎样将矢量图导入到项目中:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里是通过android studio自带的工具将svg导入到项目中,其实就是将svg转化为android自定义的以vector为结点的xml文件。
如果只有几个svg图片直接用这种方法导入就可以了,但是如果有大批量的svg图片难道也一个个的去导吗?当然有快捷方式了,这里就不展开讲了,有兴趣的同学自己去看:SVG-Android

由于svg是在android5.0中新加入的,所以必然有一个兼容性的问题,那么在android5.0以下怎么使用呢?有两种方式:
生成png:
就是将导入的svg生成png图片,只需要在app.gradle的defaultConfig中加入下面的配置指定需要生成的纬度的图片即可:

vectorDrawables. generatedDensities = ["xhdpi","xxhdpi"]

support支持库:
让support版本高于23.2,并且在app.gradle的defaultConfig中加入下面的配置:

vectorDrawables.useSupportLibrary= true

注意事项:引用svg图片时必须用app:srcCompat 属性,而不是 android:src 属性。
控件必须是AppCompat组件或者activity继承AppCompatActivity。

2.Tint着色器

tint属性可以实现图片的变色,还有backgroundTint和foregroundTint分别实现图片背景和前景的变色。
在这里插入图片描述
实现上面的效果一般是准备两张图片,然后写一个selector实现获取焦点后切换图片的效果。但是两张图片无疑会增加内存,使用tint之后可以使用一张图片实现上述的效果。
这里我们需要写两个selector,第一个是图片切换的selector,由于我们只使用一张图片所以只需要设置一样的图片即可(注意这一步不能省略),在drawable目录下创建drawable_selector:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_woman" android:state_pressed="true" />
    <item android:drawable="@drawable/ic_woman" />
</selector>

第二个是颜色切换selector,在color目录下创建color_selector(如果没有这个目录创建一个):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorAccent" android:state_pressed="true" />
    <item android:color="@color/colorPrimary" />
</selector>

最后在Imageview中设置这两个选择器:

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:tint="@color/color_selector"
            android:src="@drawable/drawable_selector" />

3.删除无用的语言资源

我们新建一个项目进行打包然后看他打包后的资源:
在这里插入图片描述

string是我们values的string.xml中的资源,但是我们新建的项目那里来的这么多资源,这其实是support包中的资源,而且他做了国际化的处理,兼容各种语言,但是我们大部分的app都是在国内使用根本用不了这么多语言,能不能把其他的语言资源移除掉呢?这样不就又能节省一些空间吗,答案当然是可以的,很简单只需要加入下面的配置:

android {
    defaultConfig {
        resConfigs "zh-rCN"
    }
}

意思是只保留中文资源,看一下之后的效果:
在这里插入图片描述

4.删除so库

android系统目前支持七种不同的cpu架构:

  1. armeabi
  2. armeabi-v7a
  3. arm64-v8a
  4. x86
  5. x86_64
  6. mips
  7. mpis64

我们可以在app.gredle文件中配置自己想要的ABI:

        ndk {
            //选择要添加的对应cpu类型的.so库。
            abiFilters 'armeabi', 'armeabi-v7a'
        }

目前主流的app主要分为三类:

  1. 只有armeabi
  2. 只有armeabi-v7a
  3. armeabi和armeabi-v7a

5.开启minifyEnabled混淆代码

在gradle使用minifyEnabled进行Proguard混淆的配置,一方面大大减小APP大小,另一方面也增加了安全性:

android {
    buildTypes {
        release {
            minifyEnabled true
        }
    }
}

6.移除无用的资源

这里是非常有意思的,举个例子,马上到双十一了,你们公司的app需要上线一个活动,于是你把这个活动做了出来,双十一结束之后这个活动没用了,如果不管他他会占用app的空间,于是你需要把之前写的东西删掉,但是这个活动包括界面、代码、引用的资源文件等等很多东西,一个个删要找很久,怎么办呢?Android studio为我们提供了快捷的工具:
在这里插入图片描述
这个操作可以删除app中所有未被使用的资源,注意是所有,这个操作风险太高了个人不推荐,还有一种可以看到并选择自己删除的资源的方式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
继续刚才的故事,眨眼间又过了一年,来到了第二年的双十一,今年双十一的活动和之前的大致相同只需要改一下图片,但是你已经把之前的代码资源删掉了,心想要是没删就好了,但是不删掉就会占用app空间,有没有什么办法可以既不删除又不占用空间,也就是在打包的时候把没有使用的资源移除,当然是有了,而且非常简单,只需要在buildTypes中加入一局代码即可:

android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
        }
    }
}

注意开启shrinkResources的前提是要开启minifyEnabled ,否则编译的时候会报错。
这样在打包的时候就会把没有用到的资源移除掉。
具体参考谷歌文档

7.对图片进行压缩

android打包本身会对png进行无损压缩,所以使用像tinypng这样的有损压缩是有必要的。 重点是Tinypng使用智能有损压缩技术,以尽量少的失真换来图片大小的锐减,效果非常好,强烈推荐。

Tinypng的官方网站:http://tinypng.com/

8.使用webp格式

webp支持透明度,压缩比比jpg更高但显示效果却不输于jpg,官方评测quality参数等于75均衡最佳。

相对于jpg、png,webp作为一种新的图片格式,限于android的支持情况暂时还没用在手机端广泛应用起来。从Android 4.0+开始原生支持,但是不支持包含透明度,直到Android 4.2.1+才支持显示含透明度的webp,使用的时候要特别注意。

官方介绍:https://developers.google.com/speed/webp/docs/precompiled

9.使用微信资源压缩混淆工具

微信资源压缩打包工具通过短资源名称,采用7zip对APP进行极致压缩实现减小APP的目标,效果非常的好,强烈推荐。
最终不仅实现了压缩还混淆了资源文件,可以说是一举两得。
具体怎么做我就不说了,大家自己去看吧AndResGuard

发布了65 篇原创文章 · 获赞 24 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/shanshui911587154/article/details/88558209