施工企业在其施工资质许可内自建自用的工程,seo关键词快速排名前三位,建德网站设计公司,广告设计专业术语我们的应用一直没有奔溃#xff0c;但是在某几款设备可能存在mmkv的报错。 研究了很久#xff0c;一方面是因为mmkv团队也已经不管这个事情#xff0c;从他的issue来看#xff0c;每次有人提到这个#xff0c;他要么就不予理睬#xff0c;给出这个并非库维护者需要干的事…我们的应用一直没有奔溃但是在某几款设备可能存在mmkv的报错。 研究了很久一方面是因为mmkv团队也已经不管这个事情从他的issue来看每次有人提到这个他要么就不予理睬给出这个并非库维护者需要干的事情要么就说你去找google。 抛开那种确实是集成库的开发者的问题之后事实99%都能用的情况后那么还存在于某个机型比如我这里也遇到的android8.1.0 Nexus 5X也会存在找不到库的情况。
首先mmkv库新版已经不支持armeabi。 解决方案有多种
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目前没有尝试。 https://my.oschina.net/vivotech/blog/5129118 这里是vivo团队提到的一个解决方案重链接。但是没有给出具体的代码。后续有空再行翻阅。 https://github.com/Tencent/MMKV/wiki/android_advance_cn#%E8%87%AA%E5%AE%9A%E4%B9%89-library-loader https://github.com/KeepSafe/ReLinker 官方和relinker都提到了在android6.0以下存在系统层面的loadLib方法不完善的问题在6.0之上是好的。 但是显然从relinker的issue和我这里都可以看到8.1的nexus5x仍然出现了。 从这个角度只能推测可能这些手机解压库可能导致了丢失或者目录结构不正常的问题。 那么解决方案代码改进为 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 /mmkvMMKV.initialize(app, dir) { libName - ReLinker.loadLibrary(app, libName) }} catch (e2:Exception) {e2.printStackTrace()}}//end相当于死马当活马医传统的代码crash了抓住使用relinker的方案再行load库大不了再crash一次。
后续我会继续跟踪和复现再行修改。