问题现象
最近要使用 weex做项目,所以就研究了一下,想按照官方的说明运行一下实例,结果一直运行不起来,通过log看,应该是加载so导致的问题,
但是通过weexpack打包时,没有问题,使用Android Studio打包时就会出现问题,具体的log如下
按照weex官方的 Demo 创建的工程,使用Android Studio打包时遇到的问题
02-09 17:52:14.053 25560 25578 E weex : [WXBridgeManager] invokeCallJSBatch: framework.js uninitialized.
02-09 17:52:14.053 25560 25578 D weex : weex JS framework from assets
02-09 17:52:14.079 25560 25578 E art : No implementation found for int com.taobao.weex.bridge.WXBridge.initFramework(java.lang.String, com.taobao.weex.bridge.WXParams) (tried Java_com_taobao_weex_bridge_WXBridge_initFramework and Java_com_taobao_weex_bridge_WXBridge_initFramework__Ljava_lang_String_2Lcom_taobao_weex_bridge_WXParams_2)
02-09 17:52:14.079 25560 25578 E weex : [WXBridgeManager] invokeInitFramework java.lang.UnsatisfiedLinkError: No implementation found for int com.taobao.weex.bridge.WXBridge.initFramework(java.lang.String, com.taobao.weex.bridge.WXParams) (tried Java_com_taobao_weex_bridge_WXBridge_initFramework and Java_com_taobao_weex_bridge_WXBridge_initFramework__Ljava_lang_String_2Lcom_taobao_weex_bridge_WXParams_2)
02-09 17:52:14.079 25560 25578 E weex : at com.taobao.weex.bridge.WXBridge.initFramework(Native Method)
02-09 17:52:14.079 25560 25578 E weex : at com.taobao.weex.bridge.WXBridgeManager.initFramework(WXBridgeManager.java:1075)
02-09 17:52:14.079 25560 25578 E weex : at com.taobao.weex.bridge.WXBridgeManager.invokeCreateInstance(WXBridgeManager.java:888)
02-09 17:52:14.079 25560 25578 E weex : at com.taobao.weex.bridge.WXBridgeManager.access$200(WXBridgeManager.java:276)
02-09 17:52:14.079 25560 25578 E weex : at com.taobao.weex.bridge.WXBridgeManager$4.run(WXBridgeManager.java:872)
02-09 17:52:14.079 25560 25578 E weex : at com.taobao.weex.common.WXThread$SafeRunnable.run(WXThread.java:234)
02-09 17:52:14.079 25560 25578 E weex : at android.os.Handler.handleCallback(Handler.java:739)
02-09 17:52:14.079 25560 25578 E weex : at android.os.Handler.dispatchMessage(Handler.java:95)
02-09 17:52:14.079 25560 25578 E weex : at android.os.Looper.loop(Looper.java:152)
02-09 17:52:14.079 25560 25578 E weex : at android.os.HandlerThread.run(HandlerThread.java:61)
02-09 17:52:14.080 25560 25578 E weex : [WXBridgeManager] invokeCreateInstance: framework.js uninitialized.
查找原因
通过搜索引擎搜索暂时没有搜到类似的问题,在官方的 Github issue 中有开发者遇到了同样的问题,但是没有解决方案,只是在不同的机型上有这个问题。
通过weexpack打包没有问题,但是通过Android Studio打包就有问题,随即就比较了一下两种方式打包成的apk文件,之前初步判断是加载so的问题,加压apk文件中lib文件夹进行比较,结果如下
- weexpack
lib/
|-- armeabi
| |-- libbitmaps.so
| |-- libimagepipeline.so
| |-- libmemchunk.so
| `-- libweexv8.so
`-- x86
|-- libbitmaps.so
|-- libimagepipeline.so
|-- libmemchunk.so
`-- libweexv8.so
- Android Studio
lib/
|-- arm64-v8a
| |-- libbitmaps.so
| |-- libimagepipeline.so
| `-- libmemchunk.so
|-- armeabi
| |-- libbitmaps.so
| |-- libimagepipeline.so
| |-- libmemchunk.so
| `-- libweexv8.so
|-- armeabi-v7a
| |-- libbitmaps.so
| |-- libimagepipeline.so
| `-- libmemchunk.so
|-- x86
| |-- libbitmaps.so
| |-- libimagepipeline.so
| |-- libmemchunk.so
| `-- libweexv8.so
`-- x86_64
|-- libbitmaps.so
|-- libimagepipeline.so
`-- libmemchunk.so
而且在arm64-v8a中没有libweexv8.so, 我使用的是一加3手机,系统是android6.0,使用的应该是arm64架构,而在arm64-v8a中没有对应的so文件,导致加载失败
解决方案
- 修改
build.gradle
defaultConfig {
...
ndk {
abiFilters "x86"
abiFilters "armeabi"
}
}
- Clean,重新编译打包,再安装,运行OK
网友评论