如何在安卓系统中减少和压缩apk文件

13

我有一个apk文件,但它的文件大小为22.4MB。这太大了,所以我需要在Android中减小或压缩apk文件。减少和压缩apk文件的正确方式是什么?


你的 APK 中使用了图片吗? - MilapTank
1
你能解释一下它是如何包含22.4 MB的吗? - Palak
APK就像是一个压缩文件。如果你把.apk改成.zip,你就可以解压它。所以,如果你需要更小的文件大小,你应该从你的文件或资源中删除.mp3或.png等文件。因为在assets中的文件会原封不动地打包进入apk中。 - MHP
为了减小APK的大小,您需要从drawable文件夹中删除不必要的图像,从asset文件夹中删除不必要的资源或任何文件,并删除未使用的文件。最重要的是,使用适当尺寸和大小的图像,不要在项目中使用非常高像素的图像,这将自动减小APK的大小。 - Android is everything for me
4个回答

9
你可以压缩APK文件(rar、zip),但必须解压缩才能使用。如果APK文件太大无法分发,则可以:
  1. 使用扩展文件: http://developer.android.com/google/play/expansion-files.html
  2. 创建多个版本的apk: http://developer.android.com/google/play/publishing/multiple-apks.html (例如,对于ldpi设备不需要hdpi文件)
  3. 使用ProGuard

    ProGuard是一个免费的Java类文件缩小程序、优化器、混淆器和预验证器。它检测并删除未使用的类、字段、方法和属性。它优化字节码并删除未使用的指令。它使用短而无意义的名称重命名剩余的类、字段和方法。最后,它为Java 6或更高版本或Java Micro Edition预验证处理过的代码。

    如果您使用Eclipse,则默认配置文件将自动添加到您的项目中。但是,这个默认配置只涵盖一般情况,因此您很可能需要根据自己的需求进行编辑。

  4. 删除未使用的资源:https://code.google.com/p/android-unused-resources/

  5. 通过使用像9patchpng optimizers这样的工具来优化您的图像
  6. 删除仅用于调试目的的所有内容(调试类,甚至是Log()方法)。还可以尝试删除不必要的.so文件

您可以压缩APK文件(rar,zip),但必须解压缩才能正常工作。如果您能告诉我们如何完成此操作,那将非常棒。如果可以这样做,将大大减小APK文件的大小。 - user1995781
@user1995781 这仅适用于传输和/或存储APK文件,例如您可以将apk放入存档中,在您的网站上提供下载,并且用户必须手动解压缩APK以安装它。 - Mdlc
你可以使用 AndResGuard 来帮助你减小 API 大小。 - Sim Sun

2

找问题

你可以从Android Studio中分析APK。这会显示各个文件以及它们的目录和大小,包括绝对大小和相对于整个APK的大小:menu entry: Analyze APK

检查未使用的资源

这是最简单的方法:menu entry: Inspect Code会显示未使用的资源,如下图所示:enter image description here

只需将其从项目中删除即可。

使用矢量图像

矢量Drawable为所有分辨率提供一个清晰的图像,大大减小了图形的大小。通常,您可以将它们用于图标等,但不适用于照片。非矢量化图像可以使用trimage进行缩小。

Proguard混淆

将以下内容添加到app/build.gradle中,以启用Proguard从项目中减少未使用的类:

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

2
你可以使用ZipAlign来压缩已签名的apk文件。 用法:
zipalign [-f] [-v] <alignment> infile.apk outfile.apk

Example:

D:\android-sdk\android-sdk\tools>zipalign -f -v 4 "C:\Users\Joisar\Desktop\project_name\appname_signed.apk" "C:\Users\Joisar\Desktop\project_name\appname__zipaligned.apk"

注意:
请通过以下命令检查apk是否已经进行了zipalign,如果没有,请进行zipalign。
zipalign -c -v 4 "C:\Users\Joisar\Desktop\project_name\appname_signed.apk"

请注意,如果您使用Eclipse导出APK文件,则此操作已完成。 - Mdlc
我曾经也有同样的信念,但我猜这并不是始终如此。当我去确认时,却得到了负面的回应。 - Mehul Joisar
嗯,好的了解。我猜Eclipse并不是很喜欢一致性。很棒的是Android Studio正在崛起。 - Mdlc
@Mdlc:是的。但由于Studio仍处于测试版阶段,我迫切期待更稳定的版本以便依赖使用。 - Mehul Joisar

0
  1. 使用 .svg 格式的图标集。
  2. 压缩 PNG 文件。
  3. 仅使用 Google Play 服务的特定库。
  4. 使用 Proguard

    build.gradle

    android {
        ...
        buildTypes {
            release {
                minifyEnabled true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
  5. 缩小资源

    build.gradle

    android {
        ...
        buildTypes {
            release {
                shrinkResources true
                minifyEnabled true
                ...
            }
        }
    }
    

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