weex使用Android Studio打包Apk的问题

问题现象

最近要使用 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

你可能感兴趣的:(weex使用Android Studio打包Apk的问题)