在应用中需要同时集成聊天和推送功能,聊天选用阿里的sdk(百川云旺),推送选用友盟的pushSDK。
这时候悲剧就出现了,注册友盟的时候报错。
I/com.umeng.message.PushAgent: register-->onFailure-->s:-11,s1:accs bindapp error!
单独集成友盟,去掉云旺相关代码,却能够正常初始化,坑!
查看日志,发现是找不到so文件导致的。应该是集成两个sdk造成so冲突的原因吧。
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/XXX.apk"],nativeLibraryDirectories=[/data/app/XXX/lib/arm64,
/system/fake-libs64, /data/app/XX.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libtnet-3.1.11.so"
java.lang.UnsatisfiedLinkError: dlopen failed:
"/data/data/XXX/files/libtnet-3.1.11bk1.so" is 32-bit instead of 64-bit
查看pushSDK下的libs目录so文件如下:
解决方法:
添加armeabi-v7a的so文件,并配置gradle如下:
buildTypes {
release {
ndk {
abiFilters "x86", "armeabi", "armeabi-v7a"
}
}
}
总结
如果项目只包含了 armeabi,那么在所有Android设备都可以运行;
如果项目只包含了 armeabi-v7a,除armeabi架构的设备外都可以运行;
如果项目只包含了 x86,那么armeabi架构和armeabi-v7a的Android设备是无法运行的; 如果同时包含了 armeabi,armeabi-v7a和x86,所有设备都可以运行,程序在运行的时候去加载不同平台对应的so,这是较为完美的一种解决方案,同时也会导致包变大。
试试加个armeabi-v7a包,哈哈,可以用啦!!!