couldn‘t find “libmmkv.so“ android8.1.0 Nexus 5X

我们的应用一直没有奔溃,但是在某几款设备可能存在mmkv的报错。

研究了很久,一方面是因为mmkv团队也已经不管这个事情,从他的issue来看,每次有人提到这个,他要么就不予理睬,给出这个并非库维护者需要干的事情,要么就说你去找google。

抛开那种确实是集成库的开发者的问题之后,事实99%都能用的情况后,那么,还存在于某个机型,比如我这里也遇到的android8.1.0 Nexus 5X,也会存在找不到库的情况。

首先mmkv库新版已经不支持armeabi。

解决方案有多种:

  1. https://blog.csdn.net/xiaobaaidaba123/article/details/127250141
    方案1: app 的build.gradle 检查 android-buildTypes 下的ndk abiFilters
    ndk {
    abiFilters "armeabi"
    }
    改为
    ndk {
    abiFilters "armeabi-v7a"
    }
    armeabi-v7a 可以向下兼容 armeabi
    方案2: 如果项目有些so 只有 armeabi 架构无法升级到 v7a 的话,可以 通过 mmkv maven 依赖的aar 包找到 armeabi-v7a 的 so, 把 so 放到项目 armeabi 目录,abiFilters 可以依旧是 "armeabi"。

从他的方案来看,只写了一个abiFilters,说明他是专用的机器。也难怪别人回复并不能解决。我推测可以参考的是,拷贝和全部写上abiFilters,目前没有尝试。

  1. https://my.oschina.net/vivotech/blog/5129118

    这里是vivo团队,提到的一个解决方案,重链接。但是没有给出具体的代码。后续有空再行翻阅。

  2. https://github.com/Tencent/MMKV/wiki/android_advance_cn#自定义-library-loader

    https://github.com/KeepSafe/ReLinker

    官方和relinker,都提到了在android6.0以下,存在系统层面的loadLib方法不完善的问题,在6.0之上是好的。

    但是显然,从relinker的issue和我这里,都可以看到8.1的nexus5x仍然出现了。

    从这个角度,只能推测,可能这些手机解压库可能导致了丢失或者目录结构不正常的问题。

    那么解决方案代码改进为:

    kotlin 复制代码
    	MMKV.initialize(app) --->
    
    	 //start 尝试: 通过找到一个自行加载
        // 二次保护来解决Mmkv可能在Nexus5X 8.1的crash问题
        try {
            MMKV.initialize(app)
        } catch (e:Exception) {
            e.printStackTrace()
            try {
                val dir: String = app.filesDir.absolutePath + "/mmkv"
                MMKV.initialize(app, dir) { libName -> ReLinker.loadLibrary(app, libName) }
            } catch (e2:Exception) {
                e2.printStackTrace()
            }
        }
        //end

    相当于死马当活马医,传统的代码crash了,抓住,使用relinker的方案再行load库,大不了再crash一次。

后续我会继续跟踪和复现,再行修改。

相关推荐
工程师老罗7 分钟前
如何在Android工程中配置NDK版本
android
Libraeking3 小时前
破壁行动:在旧项目中丝滑嵌入 Compose(混合开发实战)
android·经验分享·android jetpack
市场部需要一个软件开发岗位4 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
JMchen1236 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
crmscs6 小时前
剪映永久解锁版/电脑版永久会员VIP/安卓SVIP手机永久版下载
android·智能手机·电脑
localbob6 小时前
杀戮尖塔 v6 MOD整合版(Slay the Spire)安卓+PC端免安装中文版分享 卡牌肉鸽神作!杀戮尖塔中文版,电脑和手机都能玩!杀戮尖塔.exe 杀戮尖塔.apk
android·杀戮尖塔apk·杀戮尖塔exe·游戏分享
机建狂魔6 小时前
手机秒变电影机:Blackmagic Camera + LUT滤镜包的专业级视频解决方案
android·拍照·摄影·lut滤镜·拍摄·摄像·录像
hudawei9966 小时前
flutter和Android动画的对比
android·flutter·动画
lxysbly8 小时前
md模拟器安卓版带金手指2026
android
儿歌八万首9 小时前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节