Android专题android 进阶

APP瘦身总结整理

2019-04-14  本文已影响27人  Simplelove_f033

目录

image

1.App为何臃肿?

Android出现的最初几年里很少有几十兆的APP,但是现在我们却发现几十兆的应用比比皆是,出现这种情况的原因主要有以下三种:

2.APP的体积优化

根据APP臃肿的原因我们对APP的体积优化也主要是围绕以上三个方面来进行的。

2.1图片资源的优化

2.11 Android中使用的图片格式

在介绍优化图片资源之前我们先来了解下Android中的图片格式。

/**     * Specifies the known formats a bitmap can be compressed into     */    public enum CompressFormat {        JPEG    (0),        PNG     (1),        WEBP    (2);        CompressFormat(int nativeInt) {            this.nativeInt = nativeInt;        }        final int nativeInt;    }

通过查看Bitmap的源码,我们可以发现Android中支持的编码格式有JPEG、PNG、WEBP三种。另外我们还可以通过引入第三方函数库实现对GIF的支持,接下来分别介绍一下这四种格式的特性。

2.12 优化图片资源

现如今我们在搭建APP界面的时候几乎都是使用PNG格式的图片,所以接下来会介绍几个对PNG进行压缩或修改的工具。

image

2.2 使用Android Lint删除无用资源

Proguard只会对Java代码起作用,对于res/drawable/* 目录中的图片如果没有使用到,Proguard只会移除该图片在R文件中的引用,不会删除该图片。这时就需要用到Android Lint。Android Lint集成在Android Studio中,它会分析res目录下的资源文件,但不会分析assets目录下的资源文件。

image image image

当然我们不能过度依赖工具还要人工确认是否真的多余,例如某些资源是通过Java反射机制来使用的,这时Android Lint还是会检测出资源没有使用到。

2.3 利用Android Gradle配置

在Android Studio中我们可以通过配置app/build.gradle来进一步缩减App的大小。

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

同时shrinkResources也需要慎重使用,因为某些资源可能是通过反射机制获取的,这类资源也可能会被过滤掉从而会导致在运行应用的时候会报Resource$NotFoundException异常,为了防止这种情况,可以在res/raw/下的一个叫keep.xml的文件中定义这些例外,一个简单的keep.xml的文件如下:

xml<?xml version="1.0" encoding="utf-8"?><resources     xmlns:tools="http://schemas.android.com/tools"     tools:keep="@layout/keep_me,@layout/main_*"/>
android {    ...    defaultConfig {        ...        resConfigs "en","da","nl"        resConfigs "hdpi","xhdpi","xxhdpi","xxxhdpi"    }
android {    ...    defaultConfig {        ...        ndk{            abiFilters "armeabi-v7a" ,"x86"        }    }

2.4 利用微信的资源混淆

微信资源混淆是通过直接修改resources.arsc文件达到资源文件名的混淆,同时利用7z深度压缩,大大减少了安装包体积,同时也增加了逼格,提升了反破解难度。

上一篇下一篇

猜你喜欢

热点阅读