Android开发经验谈Android开发

APP瘦身这一篇就够了

2019-04-10  本文已影响7人  420_c35a

目录

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_*"/>

1). DPI目录:
由于Android支持的屏幕密度很多,所以我们可以根据自身需求剔除第三方函数库或者SDK中不需要的DPI目录或者文件。
2). 国际化文件:
我们引入的第三方函数库可能做了国际化适配,所以我们可以根据自身的APP的需求来将我们不需要的国际化文件给剔除掉。

android {
    ...
    defaultConfig {
        ...
        resConfigs "en","da","nl"
        resConfigs "hdpi","xhdpi","xxhdpi","xxxhdpi"
    }
android {
    ...
    defaultConfig {
        ...
        ndk{
            abiFilters "armeabi-v7a" ,"x86"
        }
    }

2.4 利用微信的资源混淆(详细介绍

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

上一篇 下一篇

猜你喜欢

热点阅读