如何减小apk

时间:2017-05-04 17:16:42

标签: android apk

我的资产和drawable只有2mb java和xml源只有1mb但是在构建项目之后apk尺寸是20mb!

我将shrinkResources设置为true 并删除未使用的资源并使用proguard生成应用程序。

有没有办法减小apk的大小?

5 个答案:

答案 0 :(得分:3)

Android Studio有自己的apk分析器,对于像你这样的情况非常有用。

分析您的apk文件并检查哪些文件正在使用这么多空间。

https://developer.android.com/studio/build/apk-analyzer.html

enter image description here

同样使用ProGuard有助于减少apk大小。

此外,避免使用不必要的库。例如,

如果您需要使用Google Analytics,请按以下方式导入仅限gradle的分析库:

compile 'com.google.android.gms:play-services-analytics:10.2.4'

不要这样使用:

compile 'com.google.android.gms:play-services:10.2.4'

第二个示例使用了太多空间和冗余类和文件。

答案 1 :(得分:1)

在你的gradle,通常调试apk将比发布APK大约50%。如果您关心调试大小,只需执行与调试配置上的发布相同的配置

buildTypes {
        release {
            minifyEnabled true  <-- minify your code
            shrinkResources true <-- remove any unused resources
            zipAlignEnabled true <-- optimization
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  <-- enable proguard is important to shrink byte code
        }
    }

其次,如果您使用的是谷歌服务依赖项,请使用个人依赖项。参考here在android studio 2.2及更高版本中,他们在Build菜单中添加了apk分析工具。用它来分析APK。

不仅适用于谷歌服务,也适用于其他库。一些图书馆将android设计或appcompat放入他们的库中。所以你需要排除那些模块(如果你已经有你的依赖项)

答案 2 :(得分:0)

根据&#34;资源收缩&#34; Andriod文档的网页(here),您可以通过build.gradle文件使用以下行来最小化应用程序的大小:

    android {
    ...

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

答案 3 :(得分:0)

你可以做以下事情

  • 删除不需要的库。甚至使用所需的库(如地图 或gcm个人而非完整游戏服务库)

  • 使用矢量图像而不是多个png。

  • 在构建文件中使用zipAlignEnabled命令

答案 4 :(得分:0)

查看我的博客Different ways to reduce apk size

要点是:

  • android.enableR8 = true //启用新的R8代码收缩器
  • minifyEnabled true &&添加Proguard规则
  • 使用Android Studio的APK分析器检查您的APK
  • 启用资源缩减
  • 将您的PNG,JPEG和BMP转换为WebP
  • 避免枚举,并使用@IntDef批注
  • 使用aaptOptions {cruncherEnabled = false} 压缩图像
  • 使用“删除未使用的资源” android studio内置功能来删除应用程序中所有未使用的资源
  • 使用代码清理android studio内置功能删除
  

注意:启用它! (*请仔细检查两次,然后再检查一切正常)