Android引用百度定位API第三方组件后导致其它.so文件无法正常加载的问题
16lz
2022-05-13
查看当前调试设备CPU架构的方法:
adb.exe shell getprop ro.product.cpu.abi (一般返回值为:armeabi-v7a)
adb.exe shell getprop ro.product.cpu.abi2(一般返回值为:armeabi)
问题场景:
- 在 Android LibraryProject A 引用 百度定位组件http://developer.baidu.com/map/index.php?title=android-locsdk
- 在 Android LibraryProjectB 引用 百度推送组件
- 在Android Project Lancher 引用 A、B类库工程
- 【正常情况下】运行后使用Root Explorer查看/data/data/x.x.lancher/lib目录中
- 【现在的情况下】此时运行后,导致 工程B 的libbdpush....SO库 没有正常释放到 /data/data/x.x.lancher/lib 目录中
导致了各种因为无法加载so库才出现的异常如:java.lang.UnsatisfiedLinkError: Couldn't load zbar: findLibrary returned null
java.lang.NoClassDefFoundError: com/zbar/lib/ZbarManager
解决方案:
- 删除 工程A 中的 工程B 不兼容的CPU架构 ,只保留和 工程B 一样的CPU架构 即可。
即 工程A 只保留 以下CPU架构:armeabi、mips
经验总结:
- 在引用各种第三方类库时,还得注意类库之间的兼容性,必须保证都兼容同样的CPU架构 ,才能保证程序不会出现莫名其妙的异常。
By:AsionTang
At:2015年5月26日 12:15:32
更多相关文章
- Android之Application引用方式
- android工程下轻松运行java main程序
- 如何制作Jar包并在android中调用jar包
- Android(安卓)ServiceManager注册自定义service
- 安卓开发艺术探索!带你全面解析Android框架体系架构view篇,年薪50W
- Android-控件架构
- Android的MediaRecorder架构介绍
- Android(安卓)Studio最终篇 - 架构
- Android(安卓): gen already exists but is not a source folder