如何减小APK文件大小

4

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

有人能告诉我这些方法是什么吗?


请查看此链接:https://mindorks.com/blog/how-to-create-multiple-apk-files-for-android-application - Om Infowave Developers
1
阅读此文 - ADM
请查看此链接:https://developer.android.com/topic/performance/reduce-apk-size.html - Ramesh sambu
可能是如何减小应用程序(.apk)大小的重复问题。 - Ko Vartthan
6个回答

6
你可以使用以下方法来缩小APK大小。
  1. 删除未使用的资源
  2. 最小化从库中使用的资源
  3. 仅支持特定密度
  4. 使用可绘制对象
  5. 重用资源
  6. 通过代码渲染
  7. 压缩PNG文件
  8. 压缩PNG和JPEG文件
  9. 使用WebP文件格式
  10. 使用矢量图形
  11. 将矢量图形用于动画图像
  12. 删除不必要的生成代码
  13. 减小本地二进制文件的大小
  14. 维护多个精简APK
  15. 混淆代码

5

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

第一步

确保在build.gradle文件中的release buildType中启用了缩小(minify)功能:

buildTypes {

    release {
        minifyEnabled true
    }

}

通过这样做,你也启用了proguard,因此你需要添加用于在项目中使用库的proguard规则。例如,以下是Retrofit2的proguard规则:

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

您可以将以下两个规则添加到您的proguard-rules.pro文件中。

第二步:

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

buildTypes {

    release {
        shrinkResources true
    }

}

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

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

第三步

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

要实现这一点,请打开build.gradle文件并添加以下行:

resConfigs "en"

将以下内容添加到android作用域下的defaultConfig作用域:

android {

    ...

    defaultConfig {

        ...
        resConfigs "en"

    }

}

第四步:

  • 使用矢量图形(vectorDrawables)而不是PNG文件。
  • 使用WebP图像而不是PNG文件。

3

我只有这些方法!希望能对您有所帮助

  1. 检查您的代码或资源文件
  2. 将PNG图像转换为WebP格式
  3. minfyEnabled true(启用代码压缩)

3
请按照以下步骤进行:
1. 使用 .svg 格式的图标集
是时候告别 PNG,并欢迎矢量可绘制图像了。使用它们有几个好处。我们不必担心不同设备 DPI,这也有助于减小 APK 大小。在支持库 23.2 中,我们现在可以使用 ImageView 的 app:srcCompat 属性而不是 android:src 来实现向后兼容。
当您从 Google 的 Material Design 图标库下载系统应用程序图标集时,请下载 .svg 格式而不是 .png。这帮助我们将应用程序大小减少了 1 Mb。

enter image description here

2. 压缩PNG文件
我们在所有屏幕密度的漫游屏幕中使用PNG格式。这些PNG文件质量和大小都非常高,导致我们的应用程序变得过于臃肿!在Weather Stream v1.2版本中,当我们开始优化应用程序大小时,我们压缩了漫游屏幕,结果惊人!漫游屏幕的大小减小了约十分之九(是的!十分之九)。我们迅速创建了一个构建版本,并在各种屏幕密度下检查了图像质量,发现它们完全一样。通过快速的谷歌搜索,您可以找到很多工具来帮助您压缩PNG文件。此外,根据Google设计团队分享的设备指标,我们还摆脱了ldpi资源。
3. 仅使用特定的Google Play服务库。
在Google Play服务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. 资源配置
在构建应用程序时,“resConfigs”属性将删除所有其他本地化资源。 在我们的例子中,“反盗屏幕锁定”仅支持英语。 而所有支持库可能会有其他语言的本地化文件夹,但我们不需要它们。 因此,请添加以下行以仅允许将英语资源添加到APK文件中。
defaultConfig {
    //...
    //...
    //...

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

1

我能想到另外三种方法:

  1. 代码混淆也可以通过定义 minifyEnabled true 来缩小apk的大小。
  2. 在运行时下载库——不建议,但是可行。
  3. 使用lint来移除未使用的代码:分析 -> 检查代码。

0
将以下代码添加到您的gradle文件中:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接