Android 升级minSdkVersion后,打出的apk包体积暴涨100%

近期在做RN项目,在一次项目pentest report 里报了一个 high 的issue,是关于安卓版本过低导致的可能存在的安全性问题,之前项目中在build.gradle 里配的 minSdkVersion 是21, 对应的安卓版本是安卓5.0.对比现在的安卓13来说,确实低了很多,因此就把 minSdkVersion 升级到了30,对应的安卓版本为安卓11.

但是自打升级minSdkVersion 后,发现打出的安卓包的体积大小由原来的38M暴增到88M,懵的一批,赶紧查找原因,先从自身查找,没发现有重复文件提交等,没办法,只能网查了。

原因:

当minSdkVersion >= 28 后,系统会在apk 中解压缩 DEX文件,从而导致包的体积变大

现在,当minSdkVersion 为 28 或更高级别时,AGP默认在APK 中打包关闭了SO压缩和 未压缩 DEX 文件,这会导致APK体积增大,但会使设备上的安卓大小变小,并且下载大小大致相同。

如需强制 AGP 改为打包压缩后的DEX 文件,您可以将一下这段代码添加到 build.gradle文件中:

android {
    packagingOptions {

        dex {

            useLegacyPackaging true

        }

    }

}

上面的方式在我自己项目中app/build.gradle 里面配上后,项目运行不起来,暂未找到原因,不过根据网查后,还有一种方式可以那就是将默认关闭SO压缩的配置打开:

在AndroidManifest.xml 里的 application 里添加  android:extractNativeLibs="true" 配置。

<application android:extractNativeLibs="true"> </application>

至少在我自己的项目里添加这个配置不报错。

或 

对应 android:extractNativeLibs="true" 配置的还有如下配置:

android {

packagingOptions {

        jniLibs {

            useLegacyPackaging true

        }

    }

}

这个配上后,仍旧导致项目跑不起来,还在调研中,谢谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录: 一、为什么我们需要做 APK 的体积优化? 二、APK 组成 三、APK分析 四、代码体积优化 五、资源体...
    mumuxi_阅读 5,478评论 0 5
  • 随着项目的不断迭代,功能越来越多,构建出来的apk文件的大小也会越来越大,这样会导致在移动网络情况下下载时,使用的...
    Androidgiao阅读 794评论 0 6
  • 背景: 1.为什么要做包体积优化 在2018年的Google I/O,Google透露了Google Play上安...
    斋芳女阅读 661评论 0 0
  • 升级gradle之后发现 打包出来的apk体积突然大了将近一倍。 解决办法 在主工程的AndroidManifes...
    lpz0715阅读 4,916评论 3 24
  • 在平常开发过程中,随着应用功能不断增加和版本功能迭代,APK的体积大小在不知不觉中不断增大,而APK体积大小会影响...
    Kennor阅读 1,001评论 0 1