X5核心接入: TBS:initX5Core bmttwebview.so is 32-bit instead of 64-bit 问题解决方案

原问题是这样的:

TBS:initX5Core -- loadSucc: false; exception: java.lang.reflect.InvocationTargetException; cause: java.lang.UnsatisfiedLinkError: dlopen failed: "/data/data/com.tencent.mm/app_tbs/core_share bmttwebview.so" is 32-bit instead of 64-bit
                                                              at java.lang.Runtime.load(Runtime.java:332)
                                                              at java.lang.System.load(System.java:1069)
                                                              at com.tencent.smtt.webkit.ContextHolder.loadMttWebViewLib(Unknown Source)
                                                              at com.tencent.smtt.webkit.ContextHolder.setContext(Unknown Source)
                                                              at com.tencent.smtt.webkit.ContextHolder.setContext(Unknown Source)
                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                              at com.tencent.tbs.x5core.X5CoreInit.setContextHolderParams(Unknown Source)
                                                              at com.tencent.tbs.tbsshell.TBSShell.initX5CoreImpl(Unknown Source)
                                                              at com.tencent.tbs.tbsshell.WebCoreProxy.canUseX5(Unknown Source)
                                                              at java.lang.reflect.Method.invoke(Native Method)
                                                              at com.tencent.smtt.sdk.bh.a(Unknown Source)
                                                              at com.tencent.smtt.sdk.bg.a(Unknown Source)
                                                              at com.tencent.smtt.sdk.f.run(Unknown Source)
02-28 17:03:04.718 29760-30885/net.huayingdai E/NetworkUtilities: [MTK_net]ss.ss_family:10
02-28 17:03:04.718 29760-30885/net.huayingdai E/NetworkUtilities: [MTK_net]ss.ss_family:2
02-28 17:03:04.718 29760-30885/net.huayingdai E/NetworkUtilities: [MTK_net]ss.ss_family:2
02-28 17:03:04.719 29760-30885/net.huayingdai E/NetworkUtilities: [MTK_net]ss.ss_family:2
02-28 17:03:04.724 29760-30767/net.huayingdai E/X5CoreEngine: TBS:mCanUseX5 is false --> report


分析:

官方demo及自己的项目,在Eclipse下运行都正常,在Android Studio下运行会出现上述问题。
从"is 32-bit instead of 64-bit"可以看出,当前so文件是32位的,而期待的是64位的so文件,同时说明当前应用启动环境是64位。

解决方案:

根本点就是如何把当前的运行环境变为32位的。
一般可通过下面两步解决:
1、在 build.gradle下的defaultConfig添加:ndk {abiFilters "armeabi", "armeabi-v7a", "x86", "mips" }
2、在gradle.properties中加入android.useDeprecatedNdk=true
若上述方案还未解决问题,请尝试在libs目录下创建armeabi文件夹,并拷贝一个 32位的so文件进入(我是直接复制eclipse下的liblbs.so进来的),此后测试,成功出现 双水滴样式。


我处理这个问题有些曲折,上述方案很早的时候就试过,但是没有效果,感觉可能是APP调试安装的时候有问题,建议先卸载原APP,再安装新的。

你可能感兴趣的:(Android问题分享)