【问题标题】:After adding large png images .SO created leading to increase in app size添加大 png 图像 .SO 后创建导致应用程序大小增加
【发布时间】:2019-07-08 10:18:20
【问题描述】:

我在我的项目中替换了一些 png 图像,但应用程序包没有成功构建,因为每个 2-3mb 的 png 文件太大。然后我用一些 jpeg 更改了图像,每个文件的大小只有几百 kb。之后,当我构建应用程序时,应用程序的大小从 9mb 变为 27mb。我分析了apk,大部分大小是由于一些lib文件造成的

我删除了构建文件夹以删除所有旧文件,但没有帮助。我排除了所有 .so 文件,但没有它们,apk 无法安装。我尝试制作一个捆绑包,但大小也相同。 我应该怎么做才能恢复到旧的 apk 大小。

【问题讨论】:

  • 不使用 jpeg 将您的 png 图像转换为 WebP
  • jpeg 文件的总大小为 500kb,这不是问题。您知道 .so 文件是如何创建的以及如何安全地删除它们吗??
  • 显示你的 gradle 文件
  • buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' ndk { abiFilters "armeabi-v7a", "armeabi" // 包括只有 ARM SO 文件,所以没有 x86 SO 文件 } } }
  • apk 大小仍然很大,armfile 大约 15mb

标签: android apk lib


【解决方案1】:

阅读Add multi-density vector graphics

Android Studio 包含一个名为 Vector Asset Studio 的工具,它可以帮助 您添加材质图标并导入可缩放矢量图形 (SVG) 和 Adobe Photoshop 文档 (PSD) 文件作为矢量添加到您的项目中 可绘制资源。使用矢量图而不是位图可以减少 APK 的大小,因为可以调整相同文件的大小 不同的屏幕密度而不损失图像质量。

您应该使用 SVG 图像而不是 JPG/PNG。

为了使您的应用尽可能小,您应该在发布版本中启用缩小功能以删除未使用的代码和资源。启用缩小时,您还可以从混淆(缩短应用程序的类和成员的名称)和优化(应用更积极的策略以进一步减小应用程序的大小)中受益。

阅读Shrink, obfuscate, and optimize your app

  android {
    buildTypes {
        release {
            // Enables code shrinking, obfuscation, and optimization for only
            // your project's release build type.
            minifyEnabled true

            // Enables resource shrinking, which is performed by the
            // Android Gradle plugin.
            shrinkResources true

            // Includes the default ProGuard rules files that are packaged with
            // the Android Gradle plugin. To learn more, go to the section about
            // R8 configuration files.
            proguardFiles getDefaultProguardFile(
                    'proguard-android-optimize.txt'),
                    'proguard-rules.pro'
        }
    }

}

【讨论】:

  • 是的,我在我的项目中使用 svg,但这些是我必须使用的图像文件。它们总共只有大约 500kb,我不明白 .so 文件来自哪里
  • 感谢它在缩小和缩减资源方面起到了作用…….so 文件完全消失了。您能否告诉我它们最初是如何创建的,以便我以后可以避免此类问题。
【解决方案2】:

我认为图像不是您创建的 dex 文件的问题我认为您包含了大型库或许多库?

【讨论】:

  • 不,我有一个用于 youtube 播放器的 youtube.jar 文件。该应用程序大小为 9mb,这只是无缘无故地发生。
【解决方案3】:

尝试设置minifyEnabled true收缩gradle文件中的资源。

【讨论】:

    【解决方案4】:

    在您的应用模块的build.gradle 中使用NDK abiFilters,如下所示:

    android {
     defaultConfig {
            //...
            ndk {
                abiFilters "armeabi-v7a", "x86", "armeabi"
            }
        }
    }
    

    您还可以排除您不想要的特定 *.so 文件:

    packagingOptions {
      exclude 'lib/arm64-v8a/lib.so'
      exclude 'lib/mips/lib.so'
    }
    

    【讨论】:

    • 是的,我试过了。 apk 正在构建但未安装,我什至不知道这些文件是如何创建的
    • @PembaTamang,当您使用exclude "lib/armeabi-v7a/**" 排除所有 .so 文件时会发生什么?
    • apk已构建但无法安装
    • @PembaTamang:好的,如果你还没有,你可以添加android.useDeprecatedNdk=true 到你的gradle.properties 文件,然后是一个干净的构建。如果安装了请告诉我?
    猜你喜欢
    • 2017-04-22
    • 2012-11-22
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 2019-12-01
    • 1970-01-01
    相关资源
    最近更新 更多