美文网首页
APK的瘦身优化

APK的瘦身优化

作者: 肥得流油 | 来源:发表于2019-06-17 12:14 被阅读0次

    现状

    随着不断的开发迭代,apk的大小不断的增大,在用户体验上变得不太友好,因此apk的瘦身显得很有必要。

    分析

    首先要apk的大小需要分析,我们才知道那部分可以瘦身

    在Android Studio工具栏里,打开build–>Analyze APK, 选择要分析的APK包
    或者直接从project目录下面寻找build outputs下的apk包然后双击。


    从上方的apk分析图中,我们可以看出apk中什么资源占据了较多内存,然后进行瘦身优化。

    具体方法

    1.开启代码混淆

    在gradle使用minifyEnabled进行Proguard混淆的配置,可大大减小APP大小:

    android {
        buildTypes {
            release {
                minifyEnabled true
            }
        }
    }
    

    混淆时候注意配置混淆
    具体配置参考混淆模版

    2.去除无用或者重复资源

    android {
        buildTypes {
            release {
                shrinkResources true
            }
        }
    }
    

    这里的去除并不是物理上的删除,而是编译器自动帮我们找出没有使用到的资源并在build的时候将这些资源保存为1x1的位图,因此大大缩小了打包后这些重复资源占据的空间。实测大概只有几十b大小。

    3.去除无用的国际化

    android {
        defaultConfig {
            resConfigs "zh"
        }
    }
    

    只保留中文,其余几十种语言都不需要。

    4.使用矢量图

    在程序中我们会用到很多图片资源,png格式或者jpg的图片,这些图片少则十多k,多着几兆。
    图片资源多了就会影响最后apk的大小。
    其实在安卓5.0之后,谷歌就支持了svg矢量图,我们可以直接从美工小哥哥那里拿svg图然后使用。
    或者使用自带的svg资源。
    使用方法:
    新建Vector资源:


    image.png

    在这里可以选择使用系统自带的资源或者,从本地选取。

    image.png

    其实,我们平常用的默认的ic_launcher.xml就是矢量图,点击去看看,你就会发现其中有Vector的节点。

    5.Tinit着色器

    除了矢量图可以节约图片本身的大小,那么我们还可以使用Tinit着色器,减少一些重复的图片使用。
    当然这里的重复也并不是说同样的图片,其实在平常的开发中,我们会用到很多图片资源只是颜色不同而已,为了做出点击效果或者按压效果等。
    其实这些不同颜色效果的图片都可以用同一张图片实现,那就是Tinit着色器。


    image.png
     android:backgroundTint="#ff00ff"
       android:drawableLeft="@drawable/ic_arrow_back_black_24dp"
       android:drawableTint="#D81B60"
    

    除了直接写死,当然也可以尝试下selector.xml哦,做出按压效果。

    6.动态库的打包配置

    我们平常会使用到很多JnILibs下面的.so库来进行一些功能的集成,但是在接手项目或者使用别人的库的时候,看到JnILibs下面有很多不同名字包下都有同样的.so文件。


    image.png

    这些都必须吗?都能用得着吗?
    那不一定哈,具体看你使用在什么设备上面,一般来说使用一个armeabi-v7a就行了

    defaultConfig{
        ndk{
          abiFilters( 'armeabi-v7a')
      }
    }
    

    如果程序需要上架到GooglePlay上面的,从2019年8月1日起,就必须支持64位的啦!
    这点还是需要注意下哈GooglePlay上架强制支持64位
    顺便说一下这个动态库的含义
    简单来说就是:
    Android 设备的CPU类型(通常称为”ABIs”)
    armeabi-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设备都使用它.
    arm64-v8a: 第8代、64位ARM处理器,很少设备,三星 Galaxy S6是其中之一。
    armeabi: 第5代、第6代的ARM处理器,早期的手机用的比较多。
    x86: 平板、模拟器用得比较多。
    x86_64: 64位的平板。

    7.使用webp

    刚刚说过,我们可以使用svg矢量图来代替png等图片减小图片大小。那么如果非要使用png等图片又怎么办呢?
    答案谷歌也给我们提供好了,那就是使用自带的webp有损压缩。
    测试了大概1mb的图片最后就会变成100kb,压缩效果很明显,也不会出现图片失真太多。
    使用方法:找到图片,然后右键,直接找到最下面的convert to WebP


    image.png
    image.png

    最后效果

    image.png

    感觉还可以吧。

    当然还有其他很多方法。

    res资源文件混淆我还没尝试过,希望大家可以在评论区互相启发一下怎么给apk瘦身,还有什么方法?

    相关文章

      网友评论

          本文标题:APK的瘦身优化

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