如何在 android studio 中减小 Apk (.apk) 的大小

Posted

技术标签:

【中文标题】如何在 android studio 中减小 Apk (.apk) 的大小【英文标题】:How to reduce Apk (.apk) size in android studio 【发布时间】:2016-12-17 16:46:38 【问题描述】:

当我运行我的应用程序时,apk 的大小将为 21 MB。即使我启用了proguard。我使用 android studio 来运行项目。在项目文件中,src 文件夹大小为 8.62 MB,lib 文件夹大小为 400 KB。那么我如何减小 .apk 文件的大小。 实际上 .apk 文件在某些​​日子之前是 8 mb 的图像,但在 paypal 集成后,我的应用程序大小将增加到 21 mb。 构建文件夹的大小为 127 MB。

build.gradle(module app) 是:

apply plugin: 'com.android.application'

android 
    compileSdkVersion 23
    buildToolsVersion "23.0.2"
    useLibrary 'org.apache.http.legacy'
    defaultConfig 
        applicationId "com.oi.food"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    
    buildTypes 
        release 
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        
    

    packagingOptions
        exclude 'AndroidManifest.xml'
     

dependencies 
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile files('libs/httpmime-4.1.1.jar')
    compile files('libs/apache-mime4j-0.6.jar')
    compile 'com.squareup.picasso:picasso:2.3.2'
    compile 'com.android.support:design:23.1.1'
    compile 'com.android.support:recyclerview-v7:23.1.1'
    compile 'com.paypal.sdk:paypal-android-sdk:2.14.1' 

【问题讨论】:

您的应用是否包含大量图片? 实际图像大小为 7 mb,代码和图像的总大小为 8.62 MB 您是否生成了发布 apk? 然后尝试缩小图像大小,删除未使用的图像,它可能会帮助你。 How to reduce Android APK size?的可能重复 【参考方案1】:

我通过在模块 app build.gradle 文件中添加此代码来解决此问题。

 android 
        packagingOptions
            exclude 'AndroidManifest.xml'
            exclude 'lib/arm64-v8a/libcardioDecider.so'
            exclude 'lib/arm64-v8a/libcardioRecognizer.so'
            exclude 'lib/arm64-v8a/libcardioRecognizer_tegra2.so'
            exclude 'lib/arm64-v8a/libopencv_core.so'
            exclude 'lib/arm64-v8a/libopencv_imgproc.so'
            exclude 'lib/armeabi/libcardioDecider.so'
            exclude 'lib/armeabi-v7a/libcardioDecider.so'
            exclude 'lib/armeabi-v7a/libcardioRecognizer.so'
            exclude 'lib/armeabi-v7a/libcardioRecognizer_tegra2.so'
            exclude 'lib/armeabi-v7a/libopencv_core.so'
            exclude 'lib/armeabi-v7a/libopencv_imgproc.so'
            exclude 'lib/mips/libcardioDecider.so'
            exclude 'lib/x86/libcardioDecider.so'
            exclude 'lib/x86/libcardioRecognizer.so'
            exclude 'lib/x86/libcardioRecognizer_tegra2.so'
            exclude 'lib/x86/libopencv_core.so'
            exclude 'lib/x86/libopencv_imgproc.so'
            exclude 'lib/x86_64/libcardioDecider.so'
            exclude 'lib/x86_64/libcardioRecognizer.so'
            exclude 'lib/x86_64/libcardioRecognizer_tegra2.so'
            exclude 'lib/x86_64/libopencv_core.so'
            exclude 'lib/x86_64/libopencv_imgproc.so'
        
    

           dependencies 
            compile fileTree(include: ['*.jar'], dir: 'libs')
            compile 'com.paypal.sdk:paypal-android-sdk:2.14.1'
        

【讨论】:

【参考方案2】:

这 4 件事可将您的 apk 大小减少近 50-60%

proguard-android.txt 替换为proguard-android-optimize.txt 制作minifyEnabledtrue 添加shrinkResources true

添加resConfigs

buildTypes 
    release 
        minifyEnabled true
        shrinkResources true
        resConfigs "en"
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    

详情:

proguard-android-optimize.txt 是比 proguard-android.txt 更激进的 progurard 配置。

shrinkResources 属性将删除所有在项目中没有使用的资源。

resConfigs 属性将在构建应用程序时删除所有其他本地化资源。在这里,它剥离了英语以外的资源。

【讨论】:

【参考方案3】:

试试

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

shrinkResources true 不会包含您在最终apk 中使用的资源中的图像

希望对你有帮助

【讨论】:

实际上 .apk 文件在某些​​日子之前是 8 mb 的图像,但在 paypal 集成后,我的应用程序大小将增加到 21 mb。构建文件夹的大小为 127 MB。【参考方案4】:

您可以通过减小图像大小来轻松减小应用程序的大小。请使用https://tinypng.com/ 减小图像大小。这将确保您的应用程序大小也减小。图像质量将保持不变。

同样对于库,请务必仅包含您真正需要的那些组件。同时删除任何不需要和未使用的导入。

【讨论】:

哦,我明白了。如果您想减小 apk 的大小,您可能希望在用户第一次运行应用程序时通过网络加载图像。这样 .apk 不需要所有的图像..【参考方案5】:

您可以使用一些技术来减小 apk 的大小:

1. Proguard:在应用级别的build.gradle文件中,添加以下代码

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

2。不必要的资源:很多时候源代码中存在不必要的资源。通过分析->检查代码检查源代码。检查结束后,删除不必要的资源。

3. Webp 图像: Webp 图像的大小比 png 文件小,而且它保留了原始图像质量。更重要的是,Android 原生支持 webp 图像。右键单击可绘制(/mipmap)文件夹 -> 转换为 webp。 Choose appropriate options which suits your need.

4.签名 apk: 调试 apk 大小大于签名 apk。通过转到 Build-> Generate Signed Bundle/Apk->APK 生成签名的 apk。总体 apk 大小现在减小了。

5. Android App Bundle: 如果您要在 Google Play 上上传应用,请生成 Android App Bundle 而不是 apk。要生成 App Bundle,请转到 Build-> Generate Signed Bundle/Apk-> Android App Bundle。它肯定会减少您的应用程序大小。例如,我使用 Android App Bundle 将 10 MB 的 apk 大小减少到仅 6-7 MB。

【讨论】:

【参考方案6】:

在打开新项目向导点击完成之前,取消选中向后兼容性(appcompat)。 这可以从 1.5 MB 减少到 180 KB。

【讨论】:

或将其从 gradle 导入中删除【参考方案7】:

我认为您应该将您的 APK 构建为(APK 捆绑包),Google 会针对 APK 大小问题进行推广。我在我的项目中使用了该选项,它确实减小了我的 APK 的大小。

【讨论】:

【参考方案8】:

减小 APK 文件大小的最佳方法是减少 build.gradle 文件中使用的库的使用。这些库产生了很多冗余,反过来又增加了项目的大小.. enter image description here

【讨论】:

以上是关于如何在 android studio 中减小 Apk (.apk) 的大小的主要内容,如果未能解决你的问题,请参考以下文章

减小 Android Studio 中评分栏的大小

减少 Android Studio 项目大小

如何在我的Android Studio中将本地管理面板与我的Android应用程序连接?

Android studio“MethodHandle.invoke 和 MethodHandle.invokeExact 仅支持从 Android O (--min-api 26) 开始”构建 AP

如何使用android studio及夜神模拟器开发调试

元素将无法在Constraintlayout Android Studio中正确居中