如何减小 apk 文件的大小?
How to reduce size of an apk file?
首先,不要推荐我official documentation or this。当我们从 Android Studio 使用仅显示 "hello world" 的预定义文本视图构建应用程序时,它会生成一个超过 1.2MB 的 APK。但是 Playstore 上的一些应用程序可用,但具有很多功能,不到 500KB。我已经应用了 Android Studio 的所有功能,如 proguard、minifyEnabled 等,但这无济于事。那么,我怎样才能达到这种压缩水平?
减少 APK 大小的要点:
1. 使用矢量图
2. 使用xml drawable创建简单视图
3. 使用 xml 可绘制对象旋转图像以重复使用(例如,在箭头按钮的情况下)
4.通过代码创建drawable
5. 使用 aaptOptions { cruncherEnabled = false } 压缩图片
6. 大图使用webP格式
7.避免枚举,使用@IntDef注解
8. 在gradle中使用shrinkResources true 去除不用的资源
9. 在 gradle 中使用 resConfig “en” 删除其他本地化
问题可能出在 support library。将 com.android.support:appcompat-v7:27.0.2
添加到空项目会使 APK 大小从 80 KB 增加到 1.3 MB。所以如果你的minSDK足够高,你不需要它的助手类,你可以去掉它。
您可以使用 APK Analyzer 查看 space 的实际情况。
当从 Android studio 创建新项目时,IDE 会自动向您的项目添加一些依赖项。
dependencies {
// ...
implementation fileTree(dir: 'libs', include: ['*.jar'])
// implementation 'com.android.support:appcompat-v7:26.1.0'
// implementation 'com.android.support.constraint:constraint-layout:1.0.2'
// ...
}
如果您捆绑 support library
和 constraint layout library
,即使您不添加任何代码,您的发布 apk 大小也会增加 rapidly。
去掉support库和constraint layout库,只用整个系统就可以得到一个非常小的apk api。
移除支持库后,你应该
使用Activity
而不是AppCompatActivity
、YourActivity extends Activity
不要在您的 AndroidManifest.xml
中使用支持库中的任何主题
使用 FrameLayout
替换布局中的 ConstraintLayout
感谢发帖 alijandro, makovkastar and Sanjay Manjoka 个人。在阅读了您的答案并在互联网上苦苦挣扎后,我发现:
- 从 build.app(模块:app)中删除不必要的自动生成的库,例如 ConstraintLayout、appcompat、junit 等
- 在 defaultConfig 块下的 build.gradle 中使用 resConfig "en"。
- 在 buildTypes 的发布块下的 build.gradle 中使用 shrinkResources true。
- 在 buildTypes 的发布块下的 build.gradle 中使用 minifyEnabled true。
- 使用 aaptOptions { cruncherEnabled = false } 压缩图片
- 对大图像使用 webP 格式
- 避免枚举并使用@IntDef 注释
- 转到“构建”>“分析 APK”,然后按“确定”。它显示了我们应用程序的状态,如下图所示。
首先,不要推荐我official documentation or this。当我们从 Android Studio 使用仅显示 "hello world" 的预定义文本视图构建应用程序时,它会生成一个超过 1.2MB 的 APK。但是 Playstore 上的一些应用程序可用,但具有很多功能,不到 500KB。我已经应用了 Android Studio 的所有功能,如 proguard、minifyEnabled 等,但这无济于事。那么,我怎样才能达到这种压缩水平?
减少 APK 大小的要点:
1. 使用矢量图
2. 使用xml drawable创建简单视图
3. 使用 xml 可绘制对象旋转图像以重复使用(例如,在箭头按钮的情况下)
4.通过代码创建drawable
5. 使用 aaptOptions { cruncherEnabled = false } 压缩图片
6. 大图使用webP格式
7.避免枚举,使用@IntDef注解
8. 在gradle中使用shrinkResources true 去除不用的资源
9. 在 gradle 中使用 resConfig “en” 删除其他本地化
问题可能出在 support library。将 com.android.support:appcompat-v7:27.0.2
添加到空项目会使 APK 大小从 80 KB 增加到 1.3 MB。所以如果你的minSDK足够高,你不需要它的助手类,你可以去掉它。
您可以使用 APK Analyzer 查看 space 的实际情况。
当从 Android studio 创建新项目时,IDE 会自动向您的项目添加一些依赖项。
dependencies {
// ...
implementation fileTree(dir: 'libs', include: ['*.jar'])
// implementation 'com.android.support:appcompat-v7:26.1.0'
// implementation 'com.android.support.constraint:constraint-layout:1.0.2'
// ...
}
如果您捆绑 support library
和 constraint layout library
,即使您不添加任何代码,您的发布 apk 大小也会增加 rapidly。
去掉support库和constraint layout库,只用整个系统就可以得到一个非常小的apk api。
移除支持库后,你应该
使用
Activity
而不是AppCompatActivity
、YourActivity extends Activity
不要在您的
AndroidManifest.xml
中使用支持库中的任何主题
使用
FrameLayout
替换布局中的ConstraintLayout
感谢发帖 alijandro, makovkastar and Sanjay Manjoka 个人。在阅读了您的答案并在互联网上苦苦挣扎后,我发现:
- 从 build.app(模块:app)中删除不必要的自动生成的库,例如 ConstraintLayout、appcompat、junit 等
- 在 defaultConfig 块下的 build.gradle 中使用 resConfig "en"。
- 在 buildTypes 的发布块下的 build.gradle 中使用 shrinkResources true。
- 在 buildTypes 的发布块下的 build.gradle 中使用 minifyEnabled true。
- 使用 aaptOptions { cruncherEnabled = false } 压缩图片
- 对大图像使用 webP 格式
- 避免枚举并使用@IntDef 注释
- 转到“构建”>“分析 APK”,然后按“确定”。它显示了我们应用程序的状态,如下图所示。