最近要使用 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文件夹进行比较,结果如下
lib/ |-- armeabi | |-- libbitmaps.so | |-- libimagepipeline.so | |-- libmemchunk.so | `-- libweexv8.so `-- x86 |-- libbitmaps.so |-- libimagepipeline.so |-- libmemchunk.so `-- libweexv8.so
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" } }