Android 中APK 体积优化的几种方法

发布于:2025-02-10 ⋅ 阅读:(112) ⋅ 点赞:(0)

在 Android 开发中,APK 体积优化是一个重要的环节,尤其是在用户下载和安装体验方面。以下是一些常用的方法来压缩 APK 体积:

1. 启用代码和资源压缩

Android 提供了 ProGuard 和 R8 工具来压缩和优化代码和资源。

1.1 启用代码压缩(ProGuard/R8)

在 build.gradle 文件中启用代码压缩:

android {
    buildTypes {
        release {
            minifyEnabled true // 启用代码压缩
            shrinkResources true // 启用资源压缩
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}
  • minifyEnabled true:启用代码压缩和混淆。

  • shrinkResources true:移除未使用的资源文件。

  • proguardFiles:指定 ProGuard 规则文件。

1.2 自定义 ProGuard 规则

在 proguard-rules.pro 中添加自定义规则,确保必要的类和方法不被移除或混淆。

2. 移除未使用的资源

2.1 使用 shrinkResources

在 build.gradle 中启用 shrinkResources,自动移除未使用的资源:

android {
    buildTypes {
        release {
            shrinkResources true // 启用资源压缩
        }
    }
}

2.2 使用 lint 工具

运行 lint 检查未使用的资源:

./gradlew lint

在 lint 报告中查找未使用的资源并手动删除。

2.3 使用 resConfigs 限制资源语言

如果应用只支持特定语言,可以通过 resConfigs 移除其他语言的资源:

android {
    defaultConfig {
        resConfigs "en", "zh" // 只保留英文和中文资源
    }
}

3. 优化资源文件

3.1 压缩图片资源

使用工具(如 TinyPNG 或 ImageOptim)压缩图片。

使用 WebP 格式替代 PNG 或 JPEG,WebP 通常具有更小的体积:

右键点击图片 -> Convert to WebP

3.2 移除未使用的资源

  • 删除未使用的图片、布局、字符串等资源。

  • 使用 lint 工具检查未使用的资源。

3.3 使用矢量图(Vector Drawable)

矢量图可以替代多分辨率的位图,减少资源文件数量:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24"
    android:viewportHeight="24">
    <path
        android:fillColor="#FF0000"
        android:pathData="M12,2L2,22h20L12,2z"/>
</vector>

4. 优化代码

4.1 移除未使用的依赖库

检查 build.gradle 文件,移除未使用的依赖库:

dependencies {
    implementation 'com.example:library:1.0.0' // 确保只保留必要的库
}

4.2 使用代码拆分

  • ABI 拆分:为不同的 CPU 架构生成单独的 APK:
android {
    splits {
        abi {
            enable true
            reset()
            include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
            universalApk false
        }
    }
}
  • 按屏幕密度拆分:为不同的屏幕密度生成单独的 APK:
android {
    splits {
        density {
            enable true
            reset()
            include 'mdpi', 'hdpi', 'xhdpi', 'xxhdpi', 'xxxhdpi'
        }
    }
}

4.3 使用动态功能模块

将部分功能拆分为动态功能模块(Dynamic Feature Module),用户可以在需要时下载:

android {
    dynamicFeatures = [':feature_module']
}

5. 使用 Android App Bundle (AAB)

Google Play 推荐使用 AAB 格式上传应用,Google Play 会根据用户设备生成优化的 APK:

  • 在 build.gradle 中启用 AAB:
android {
    bundle {
        language {
            enableSplit = true
        }
        density {
            enableSplit = true
        }
        abi {
            enableSplit = true
        }
    }
}
  • 使用 Android Studio 生成 AAB 文件:

点击 Build -> Build Bundle(s) / APK(s) -> Build Bundle(s)。

6. 移除调试信息

在发布版本中移除调试信息,减少 APK 体积:

android {
    buildTypes {
        release {
            debuggable false
            jniDebuggable false
            renderscriptDebuggable false
        }
    }
}

7. 使用第三方工具

7.1 AndResGuard

AndResGuard 是一个资源混淆工具,可以进一步压缩资源文件:

  • 在 build.gradle 中添加插件:
plugins {
    id 'com.tencent.andresguard'
}
  • 配置 AndResGuard:
andResGuard {
    mappingFile = null
    use7zip = true
    useSign = true
    keepRoot = false
    whiteList = [
        // 保留白名单资源
    ]
    compressFilePattern = [
        "*.png",
        "*.jpg",
        "*.jpeg",
        "*.gif",
    ]
}

7.2 Zipalign

  • 使用 zipalign 工具优化 APK 文件:
zipalign -v 4 input.apk output.apk

8. 检查 APK 内容

使用 Android Studio 的 APK 分析工具检查 APK 内容,找出体积较大的文件:

  • 打开 APK 分析工具:

点击 Build -> Analyze APK。

  • 查看 APK 中占用空间较大的文件,并针对性优化。

网站公告

今日签到

点亮在社区的每一天
去签到