目录
背景
兼容64位步骤
1.配置ndk支持arm64
2.进行build构建
3.构建完之后,进行apk包的分析
4.比较lib/armeabi-v7a和lib/arm64-v8a两个文件夹下的so库文件
5.确定缺少的so库文件属于哪些三方依赖
6.确定完所属依赖后,要么升级依赖、要么直接引入对应的64位so文件
7.进行测试验证
补充
背景
金标联盟64位适配时间节点重要通知(三)金标联盟 | ITGSA | 移动智能终端生态联盟是国内领先的行业非盈利性组织,由领先的智能终端厂商联合发起和建立,旨在推动全行业应用生态标准化、规范化、合规化、高效化,提升全行业应用服务水平和能力,促进行业共赢、共发展。https://www.itgsa.com/home/news/info?newsId=5256238539162624
主要就是Arm架构新机不再支持32位应用的安装与使用,所以必须对旧应用进行兼容64位处理
兼容64位步骤
谷歌官方参考文档:https://developer.android.com/distribute/best-practices/develop/64-bit?hl=zh-cn#guidelines-ndk
1.配置ndk支持arm64
armeabi-v7a要保留,后续有用,而且你兼容了新机,旧机也得兼容啊,有些旧机只支持32位(说的就是银联的pda设备,优博讯I9000S)
ndk { abiFilters "armeabi-v7a", "arm64-v8a" }
2.进行build构建
3.构建完之后,进行apk包的分析
【build - Analyze APK...】选择项目目录下 ~/app/build/outputs/apk/debug/app-debug.apk
等待分析完毕
4.比较lib/armeabi-v7a和lib/arm64-v8a两个文件夹下的so库文件
看看lib/arm64-v8a中缺少哪些so库文件
5.确定缺少的so库文件属于哪些三方依赖
参考:【Android开发】如何快速知道某个so来源于哪个库_android查看so来源_又吹风_Bassy的博客-CSDN博客有时候需要查找某些 so文件是来源于哪个库的,方便删除。以下是一个小技巧:在 app模块的 build.gradle中,追加以下代码://列出所有包含有so文件的库信息tasks.whenTaskAdded { task -> if (task.name=='mergeBiDebugNativeLibs') { //如果是有多个flavor,则用 mergeFlavorDebugNativeLibs的形式 task.doFirst { ...https://blog.csdn.net/eieihihi/article/details/109289312
此外,有些手动引入的so文件,通过上面文章的方法找不到所属依赖,则你需要通过git中文件引入的历史记录,确定是在实现什么功能时引入的,然后基本就知道是哪个依赖的了
6.确定完所属依赖后,要么升级依赖、要么直接引入对应的64位so文件
升级依赖:比如我遇到的Fresco依赖,我直接由1.10.0升级到1.13.0,为什么不升级更高的,因为更高的版本是androidx的,我的旧项目很遗憾,还是support的,暂时没计划迁移
7.进行测试验证
补充
如果你的应用运行在双屏收银机(比如商米x2)上,设备是64位的,需要用到银联mis键盘(32位)收款,那你需要确定调用mis键盘的sdk是否支持64位,不然应用不要兼容64位