如何减少APK文件大小

时间:2017-12-20 10:28:14

标签: android apk

有人在采访中问我如何减少APK文件大小,我的答案是管理资源,管理我正在使用的库并删除任何未使用的库,但他告诉我还有其他方法可以减少APK文件大小

谁能告诉我这些方法是什么?

6 个答案:

答案 0 :(得分:5)

您可以使用以下方式减少APk大小。

  1. 删除未使用的资源
  2. 尽量减少图书馆的资源使用
  3. 仅支持特定密度
  4. 使用可绘制对象
  5. 重用资源
  6. 从代码
  7. 渲染
  8. 紧缩PNG文件
  9. 压缩PNG和JPEG文件
  10. 使用WebP文件格式
  11. 使用矢量图形
  12. 使用矢量图形制作动画图像
  13. 删除不必要的生成代码
  14. 减少原生二进制文件的大小
  15. 维护多个精简APK
  16. 代码的混淆

答案 1 :(得分:2)

按照以下步骤减少APK文件大小。

第一步

确保您在release文件中的build.gradle buildType中启用了缩小

buildTypes {

    release {
        minifyEnabled true
    }

}

通过执行此操作,您还启用了 proguard ,因此您需要添加proguard规则以在项目中使用库。例如,这是retrofit2的预备规则:

-dontwarn okio.**
-dontwarn javax.annotation.**

您可以在proguard-rules.pro文件中添加这两条规则。

第二步

确保您已在release文件的build.gradle buildType中启用资源缩减:

buildTypes {

    release {
        shrinkResources true
    }

}

因此release文件中的最终build.gradle范围应如下所示:

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

第3步

您可能在项目中使用过的某些库为不同的国家/地区和语言提供了一些额外的资源。例如,一个库可以有两个string.xml文件,一个用于英语,一个用于日语。但是你只在你的应用程序中支持英语,所以你不需要那些日语字符串。

执行此操作打开build.gradle文件并添加以下行:

resConfigs "en"

到android scope下的defaultConfig范围:

android {

    ...

    defaultConfig {

        ...
        resConfigs "en"

    }

}

第4步

  • 使用 vectorDrawables 代替png文件
  • 使用 webp 图片而不是png文件

答案 2 :(得分:1)

请按照以下步骤进行操作

<强> 1。使用.svg格式图标集

是时候再见 PNG 并欢迎矢量绘图。使用它们有几个好处。我们不必担心不同的设备DPI,它也有助于减少apk大小。使用支持库23.2,我们现在可以使用ImageView的 app:srcCompat 属性而不是 android:src 来使其向后兼容。 从Google的Material Design图标库下载系统应用程序图标集时,请下载 .svg 格式而不是.pngs。这有助于我们将应用程序大小减少1 Mb。

enter image description here

<强> 2。压缩PNG

我们使用PNG作为所有屏幕密度的演练屏幕。 PNG的质量和尺寸非常高,只是增加了我们的应用程序大小!在 Weather Stream v1.2中,当我们开始优化应用程序大小时,我们压缩了我们的演练屏幕和繁荣!演练屏幕大小是以前的1/10! (是的!1/10)。太疯狂了!我们快速创建了一个构建并检查了各种屏幕密度的图像质量,看起来一样。快速谷歌搜索将为您提供许多工具,帮助您压缩您的PNG。在看到Google Design团队分享的Device Metrics之后,我们也摆脱了ldpi资源。

第3。仅使用特定的Google Play服务库。

在Google Play Services 6.5之前,我们必须编译整个软件包。但现在我们可以有选择地将它编译到我们的应用程我们现在只使用Google Cloud Messaging,Google Maps和Google Location API。

<强> 4。使用Proguard

Proguard用于代码混淆,它还从依赖项中删除未使用的Java代码。使用Proguard后的结果是较小的apk文件大小,很难进行逆向工程。要启用proguard:

的build.gradle

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

<强> 5。收缩资源

Android Gradle插件支持使用shrinkResources gradle属性在构建过程中自动排除未使用的资源。仅此一项就将apk尺寸缩小了约0.5 Mb。要在发布版本中利用这一点,只需将shrinkResources true添加到您的发布配置中即可。

的build.gradle

android {
    ...
    buildTypes {
        release {
            shrinkResources true
            minifyEnabled true
            ...
           //Other parameters
           debuggable false
           jniDebuggable false
           renderscriptDebuggable false
        }
    }
}

<强> 6。 res Confing

“resConfigs”属性将在构建应用程序时删除所有其他本地化资源。在我们的例子中,“防盗锁屏”仅支持英语。虽然所有支持库都可能具有其他语言的本地化文件夹。我们不需要。因此,添加以下行以仅允许在APK文件中添加英语资源。

defaultConfig {
    //...
    //...
    //...

    //strip other than english resources
    resConfigs "en"
}

答案 3 :(得分:1)

我只有这些方法!我希望它可以帮到你

  1. lint your code或res
  2. png image to webp
  3. minfyEnabled true

答案 4 :(得分:0)

我还有3种方法可以想到:

  1. 通过定义minifyEnabled true
  2. ,代码的混淆也会缩小您的apk大小
  3. 在运行时下载库 - 不推荐,非常黑客,但有效。
  4. 使用lint删除未使用的代码:Analyze - &gt;检查代码

答案 5 :(得分:-1)

将此内容添加到您的gradle文件中

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