IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    weex使用Android Studio打包Apk的问题

    shendao发表于 2017-05-31 04:20:28
    love 0

    问题现象

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


沪ICP备19023445号-2号
友情链接