项目AGP升级至7.0+后发现打出来release包的体积比之前增加近一倍,经过查询官方文档得知在AGP3.6.0时的行为变更上:默认情况下,原生库以未压缩的形式打包。
在构建应用时,插件现在默认会将 extractNativeLibs
设置为 "false"
也就是说,您的原生库将保持页面对齐状态并以未压缩的形式打包。虽然这样会增加上传大小,但您的用户会从以下优势中受益:
- 减小应用安装大小,因为平台可以直接从已安装的 APK 访问原生库,而无需创建库的副本。
- 减小下载文件大小,因为在 APK 或
Android App Bundle
中添加未压缩的原生库通常可提高 Play 商店的压缩率。
如果您希望 Android Gradle
插件改为打包压缩后的原生库,请在应用的清单中添加以下代码:
<application
android:extractNativeLibs="true"
... >
</application>
但是从 AGP 4.2.0 开始,extractNativeLibs
清单属性已被 DSL 选项 useLegacyPackaging
取代。 您应该使用应用的 build.gradle
文件中的 useLegacyPackaging
(而非清单文件中的 extractNativeLibs
)来配置原生库压缩行为:
使用 DSL 打包压缩后的原生库
官方建议以未压缩的形式打包原生库,因为这会减小应用安装大小,缩减应用下载大小,并缩短用户的应用加载时间。不过,如果您希望 Android Gradle
插件在构建应用时打包压缩后的原生库,请在应用的 build.gradle
文件中将 useLegacyPackaging
设置为 true
:
android {
packagingOptions {
jniLibs {
useLegacyPackaging true
}
}
}
注意:useLegacyPackaging
标记会替换 extractNativeLibs
清单属性。默认情况下,原生库以未压缩的形式打包。
官方文档参考:
https://developer.android.com/studio/releases/gradle-plugin?buildsystem=ndk-build#extractNativeLibs
https://developer.android.com/studio/releases/gradle-plugin?buildsystem=ndk-build#compress-native-libs-dsl