近期在做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
}
}
}
这个配上后,仍旧导致项目跑不起来,还在调研中,谢谢