adnroid gradle4.0以后关于arm64-v8a和armeabi-v7a的兼容性处理问题
android项目开发过程使用到so库的时候,一般我们都是使用armeabi-v7a版本对应32位系统,arm64-v8a版本对应64位系统;
方法一:使用两份so好处就是兼顾到了64位的高性能,但是需要两份so库就增加apk大小;
方法二:我们只想使用一份so库去同时兼容32位和64位。下面就是就有两种方式:
方式1:只使用armeabi-v7a版本so库,只有32位机器上可以使用,64位机器上也可以使用,但是就没有最大化发挥出64位机器的性能了。
方式2:只使用arm64-v8a版本so库,64位机器可以使用并且最大化发挥出了64位机器的性能,但是32位机器不能使用直接崩溃。
方法一的配置:
externalNativeBuild {
cmake {
abiFilters "armeabi-v7a" ,"arm64-v8a"
}
}
方法二的配置:
externalNativeBuild {
cmake {
abiFilters "armeabi-v7a" //只使用64位
}
}
externalNativeBuild {
cmake {
abiFilters "arm64-v8a" //只使用64位
}
}
但是,这里有个关于gradle的重大变化:
使用方法二的方式1时,也就是只使用armeabi-v7a版本so库去兼容32位和64位的时候,配置的abiFilters "armeabi-v7a" 在gradle3.x和4.x时有变化。
在classpath "com.android.tools.build:gradle:3.1.2" 插入64位机器编译出来的apk一切正常,含有armeabi-v7a的so库,并且32和64位机器都可以正常运行。
在classpath "com.android.tools.build:gradle:4.0.1" 插入64位机器版本时编译出来的apk竟然是不含有armeabi-v7a的so库的,仔细看log也说明了,运行当然崩溃,
但是我插入32位机器竟然正常,我擦gradle4.x还会根据插入的机器自动识别位数,所以别再被坑了。还好最后打包出来的是含有armeabi-v7a的so库的,
所以在gradle4.x以上只想使用armeabi-v7a就只能在32位机器上做开发了,哈。
分类:
gradle
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库