APK瘦身

作者: 追寻米K | 来源:发表于2019-03-06 19:25 被阅读0次

1. SVG
Scalable Vector Graphics,可缩放矢量图。SVG不会像位图一样因为缩放而让图片质量下降。优点在于节约空间与内存。常用于简单小图标。
svg是由xml定义的,标准svg根节点为<svg>
在Android中通过 Vector实现对svg的支持,根节点<vector>。
https://developer.android.google.cn/studio/write/vector-asset-studio.html
获得一张svg需要先进行转换才能在android当中使用。



如果需要批量的转换SVG可以动过第三方工具转换:
https://github.com/MegatronKing/SVG-Android/blob/master/svg-vector-cli/bat/svg2vector-cli-1.0.0.jar
下载下来就是一个jar包
执行转换命令:
java -jar svg2vector-cli-1.0.0.jar -d 输入路径 -o 输出路径 -h 20 -w 20
-d 指定svg文件所在目录
-f 指定当个svg文件
-h 设置转换后svg的高
-w 设置转换后svg的宽
-o 输出android vector图像目录
建议您将矢量图像限制为最大 200 x 200 dp;否则,绘制它可能需要耗费很长的时间

SVG兼容
Android 5.0(API 级别 21)及更高版本会提供矢量图支持。如果应用的最低 API 级别低于以上版本则需要做兼容处理。

png生成:
app/build.gradle 中添加generatedDensities =['xhdpi','hdpi']



在drawable/test.xml矢量图会生成一个png图片


支持库:
需要Android 支持库 23.2 或更高版本、适用于 Gradle 的 Android 插件 2.0 或更高版本,且仅使用矢量图。利用支持库中的 VectorDrawableCompat 类,可实现在 Android 2.1(API 级别 7)及更高版本中支持 VectorDrawable。



2.Tint着色器
tint能够实现图片变色,利用tint显示不同颜色的图片,原本需要多张相同图片不同颜色的情况,能够减少apk的体积


selector点击效果:
<ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:src="@drawable/src_selector"
        android:tint="@color/tint_selector" />

color文件夹下tint的color

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorAccent" android:state_pressed="true"/>
    <item android:color="@color/colorPrimary" android:state_pressed="false"/>
</selector>

drawable的selector

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/zhi" android:state_pressed="true"></item>
    <item android:drawable="@drawable/zhi" android:state_pressed="false"></item>
</selector>\

3. webp
把png、jpeg转换成webp

4. 资源压缩
由于第三方库,如appcompat-v7的引入,库中包含了大量的国际化资源,根据情况通过配置删除。
默认打包的APK是带有很多不同语言的资源,比如日文的字符、韩文的字符,你没有写打包的时候也会生成。
如果只想支持中文和英文,我们通常在默认的values里面的strings.xml写中文,在新建一个values-en里面的strings.xml写英文。这个时候可以在Gradle里配置:


只保留英文资源和默认资源。

5. 动态库打包配置


真机我们只要打包armeabi-v7a的动态库就行。

6. 删除无效的资源
在Android Studio上可以一键删除可能无效的资源,仅仅是可能无效。


但是我们不能这样做,因为会误删除,概率还不小。

使用Lint检查:




选择我们的主工程



这里还需要结合代码选择删除。

7. 代码压缩和资源压缩
官网说明:
https://developer.android.google.cn/studio/build/shrink-code.html#shrink-resources

          minifyEnabled true
          proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

资源压缩:

        debug{
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

这样默认的压缩比较宽松,要执行严格的资源压缩:
在res下建raw文件夹(res/raw/),并建keep.xml,在 keep.xml 文件中将 shrinkMode 设置为 strict,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:shrinkMode="strict" />

资源压缩也会存在误删除,则需要自定义要保留的资源,也可以在keep.xml中:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
    tools:keep="@layout/l_used*_c,@layout/l_used_a,@layout/l_used_b*"
    tools:discard="@layout/unused2" />

tools:keep 属性中指定每个要保留的资源,在 tools:discard 属性中指定每个要舍弃的资源。

相关文章

  • APK瘦身 减小APP体积

    APK dex瘦身 APK res瘦身 APK减小语言包 APK 重新打包 PNG转JPG tiny处理png w...

  • Drawable 着色的后向兼容方案

    Drawable 着色的后向兼容方案(APK瘦身实践APK瘦身实践)[http://www.cnblogs.com...

  • Android性能优化

    Apk瘦身实用总结 Apk瘦身 Apk的大小对于用户是否选择下载应用起着至关重要的影响下面是对于减小Apk大小的一...

  • Android性能优化:实战讲解包体积优化(上)

    一、瘦身优化及 Apk 分析方案介绍 1、瘦身优势 我们首先来介绍下,为什么我们需要做 APK 的瘦身优化? AP...

  • app性能优化

    Android冷启动时间优化 Android开发——避免内存泄露 APK瘦身实践 APK瘦身记,如何实现高达53%...

  • apk瘦身

    Android性能优化之APK瘦身详解(瘦身73%) - 简书

  • android apk瘦身

    apk瘦身会带来哪些好处,本文就不赘述了,会依照下面的目录来对apk瘦身进行总结 目录 apk都有啥? 从资源下手...

  • Android apk瘦身实践

    写在前面 最近刚做了一波apk瘦身优化,瘦身后apk大小降低了19%左右。打铁要趁热,赶紧记录一下先。 APK A...

  • ipa和apk简易瘦身

    Material Design风格apk 瘦身ipa 瘦身 一、起因 新版本发布后发现安装包apk和ipa各增加了...

  • 【转】APK瘦身实践

    本文转自:Apk瘦身实践作者:杰风居 转载序:Android开发中,apk瘦身还是很有必要,尤其现在的APP动辄十...

网友评论

      本文标题:APK瘦身

      本文链接:https://www.haomeiwen.com/subject/xvefuqtx.html