从小米14安装不上应用说起【适配64位】

一、原因

某天早上,同事突然对我说我换了小米14pro手机但是安装不了公司的打卡软件,怎么办呀。一时间,我也不知道原因,看到给我发的安装不上的截图陷入了沉思。随即打开在git仓库里找到这个项目,到本地编译打开,开始思考解决办法。

二、解决思路

从网上查询了一番,小米14pro 只支持安装64位的应用,可能是老项目没有做64位的适配。等到项目编译好,打开模块下的build.gradle文件,果然如此,没有做64位的适配。

groovy 复制代码
ndk {
    abiFilters 'armeabi', "x86", "x86_64"
}

针对64位做适配,一般都是适配so库,一般来说,如果你的项目中没有使用到so库或者C,C++代码,都是支持64位的。

这里再做下说明,ABI是Application Binary Interface(应用程序二进制接口)的缩写,在Android中,它指的是Android操作系统与设备硬件供应商提供的库之间的接口。ABI定义了程序各个组件在二进制级别上的交互方式,其中一个重要的方面是处理器使用的指令集架构。Android支持多种ABI以适应具有不同硬件架构的设备。

  • ARM(Advanced RISC Machine):
    • ARM是移动设备中常见的架构。
    • 变体:armv5、armv7-A、armv8-A(64位)等。
  • x86:
    • x86是台式机和笔记本电脑中常见的架构。
    • 变体:x86、x86_64(64位)。
  • MIPS(Microprocessor without Interlocked Pipeline Stages):
    • MIPS架构在过去在一些Android设备中被广泛使用,但近年来变得不那么常见。

好了,回归到正题,就要针对项目中这种情况处理so库了,因为这个老项目是从其他项目演变过来的,用不到这些so库,所以我的解决办法就是全部删除掉(当然要对项目中的源代码进行处理),再进行打包处理。

如果你们处理项目中的没有兼容的so库,推荐一个检测插件EasyPrivacy,接入这个就可以方便查看那些so库没有做适配了。

找到没有适配的so库之后,需要找到提供者获取最新兼容的so库或者找到相关官网看是否提供64位的so库。当然代码中还需要进行处理。

groovy 复制代码
ndk {
    abiFilters 'armeabi-v7a', 'arm64-v8a', "x86", "x86_64"
}

这样子打包的时候,在apk中的libs文件夹下就会出现四个对应的文件夹,里面就是对应的so库了。但是这样会增大包的体积。在android{}中配置如下代码,这样子打包之后就会出现四种包对应不同架构的包,这样子包的体积也会减小。

groovy 复制代码
splits {
    abi {
        enable true
        reset()
        include 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64' //select ABIs to build APKs for
        universalApk true //generate an additional APK that contains all the ABIs
    }
}

回归正题,当我把打好的包发给同事的时候,同事告诉我还是不行。思来想去,排除64位的问题,那么剩下的只有Android版本的问题了。新出的手机肯定是搭载最新的Android版本,目前Android 14 有什么新变动还没有了解到。

从官网看到,映入眼前的第一条就是这个,检查项目中的代码,发现targetSdkVersion 还是16,怪不得安装不上,至此所有问题解决。

相关推荐
普通网友1 天前
Android Jetpack 架构组件最佳实践之“网抑云”APP
android·架构·android jetpack
普通网友1 天前
原创_Android Jetpack Compose 最全上手指南
android·android jetpack
FDoubleman1 天前
Android Jetpack之Compose入门(一)
android·android jetpack
普通网友1 天前
Android Jetpack从入门到精通,干货满满
android·android jetpack
子云心1 天前
Android Jetpack 系列(七)App Startup 启动优化
android·android jetpack·jetpack·initializer·startup·appstartup
嫩嫩的猿1 天前
android jetpack compose Model对象更新变量 UI不更新、不刷新问题
android·ui·android jetpack
普通网友1 天前
Android Jetpack 之 LifeCycle 组件_android 自定义view lifecycle
android·gitee·android jetpack
_codemonster1 天前
数据库字符集编码问题
android·数据库·oracle
Pika1 天前
深入浅出Compose HitTest 机制
android·android jetpack