美文网首页Weex开发Weex开发技巧Android实践
weex使用Android Studio打包Apk的问题

weex使用Android Studio打包Apk的问题

作者: CoderMiner | 来源:发表于2017-02-09 18:21 被阅读4528次

    问题现象

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

    相关文章

      网友评论

      • 85bd84109e1e:我打包好的apk 为什么在手机上安装会显示包损坏
      • registernet:还有一个可能,在AS的时候,如果在IDE点运行,会出上面的错误,但打包出来手工安装,不出错。经试验build tool配置为com.android.tools.build:gradle:2.2.2时不会出错,但是大于这个值如com.android.tools.build:gradle:2.3.2会。

      本文标题:weex使用Android Studio打包Apk的问题

      本文链接:https://www.haomeiwen.com/subject/kwrwittx.html