问题
在vivo X5Pro手机上,点击微博登录时出现崩溃。
经过分析发现是微博依赖的so库在该设备上缺失导致的。
原因
vivo X5Pro手机cpu架构为arm64-v8a,在app对应的arm64-v8a目录下没有提供微博分享的so库,按照android so库的加载规则:如果应用存在和设备cpu架构一致的lib库就使用该lib,否则去找其他兼容库。即当app存在arm64-v8a目录,设备为arm64-v8a架构时,默认就会从arm64-v8a目录下拷贝库到app安装目录,一旦该架构目录下so库不完全,就会造成运行时崩溃。
具体见android官方文档
解决办法
解决办法是app中尽量使用一个目录库(选择通用的abi库),并保证该目录下so库完整。具体办法:
在build.gradle文件中增加设置(使用armeabi-v7a 和 armeabi,保证应用中这两个库是完备的):
android{
defaultConfig{
...
ndk {
abiFilters "armeabi-v7a","armeabi"
}
}
}
在gradle.properties中增加一条设置
android.useDeprecatedNdk=true
业界方案
研究过微信、qq的lib目录,发现它们的app内只有一个armeabi目录,这样就避免了这个问题。
但在这个目录中会通过后缀_v7a这种方式区分出armeabi-v7a库,预计会在加载时根据不同的架构动态区分,感觉这是一个即保证效率同时又规避android lib坑的办法。
网友评论