Weex踩坑记录(长期更新)

Q:引入0.28版本后,引擎初始化失败,无法正常展示weex页面。

A:在 0.28.0 之前, Weex Android 依赖并且将JavaScriptCore 作为 Weex 在 JCenter 上的发布产物的一部分,这种方式有如下缺陷:

  • JavaScriptCore 属于双重授权项目,一部分以 BSD 形式授权,另一部分以 LGPL 形式授权,而这与 ASF 的 License 授权政策相违背。
  • 如果将 JavaScriptCore 包含在 Weex 的 JCenter 发布产物中,会剥夺用户选择 JavaScript 解析引擎的自由。
  • Weex 内置的 JavaScriptCore 是基于 JavaScriptCore 2016版 进行了裁剪,已经数年未更新。

基于上述原因,从 Weex 0.28.0 开始,JavaScript 引擎将不再内置于 Weex 在 JCenter 上的发布产物中,用户可以自由选择它们喜欢的 JavaScript 引擎,只要这个引擎遵循了指定接口。

这意味着用户需要在它们的 App 中内置 JavaScript 引擎,否则 Weex 将无法运行。对于不知道如何选择 JavaScript 用户的引擎,可以在 App 的 build.gradle 中引入下述脚本:

apply from: 'https://raw.githubusercontent.com/apache/incubator-weex/release/0.28/android/sdk/buildSrc/download_jsc.gradle'

这个脚本将会下载并内置jsc-android到你的 App 中。上述脚本仅为演示时使用,用户依然有权利在 App 中选择其符合其诉求的 JavaScript 引擎。

TIP

  1. 上述脚本中引入的 JavaScriptCore Interpreter 只支持 armeabi-v7a, arm64-v8a, x86 三种架构。
  2. 上述脚本将尝试把 JavaScriptCore Interpreter 拷贝至 project.android.sourceSets.main.jniLibs 文件夹。

若你的工程无法在上述条件下运行起来,请自行调整脚本。

或者直接libjsc.so放入jnilibs中即可。
PS:我就是直接把so库放到jinlibs中成功的,其他方式不行。

Q:WXSDKEngine初始化时间

A:用下面两种方式各测试了6次,初始化时间在500-700毫秒左右,所以在使用前一定要先判端WXSDKEngine是否初始化完毕!!

        //        new Thread(() -> {
//            while (!WXSDKEngine.isInitialized()) {
//                LogUtils.i("WXSDKEngine.isInitialized: " + false);
//                try {
//                    Thread.sleep(100);
//                } catch (InterruptedException e) {
//                    e.printStackTrace();
//                }
//            }
//            LogUtils.i("WXSDKEngine.isInitialized: " + true);
//        }).start();
//        mWXSDKEngineIsInitCheckHandler = new Handler(msg -> {
//            if (msg.what == 0) {
//                boolean isSuccess = WXSDKEngine.isInitialized();
//                LogUtils.i("WXSDKEngine.isInitialized: " + isSuccess);
//                if (!isSuccess) {
//                    msg = mWXSDKEngineIsInitCheckHandler.obtainMessage(0);
//                    mWXSDKEngineIsInitCheckHandler.sendMessageDelayed(msg, 100);
//                }
//            }
//            return false;
//        });
//        Message msg = mWXSDKEngineIsInitCheckHandler.obtainMessage(0);
//        mWXSDKEngineIsInitCheckHandler.sendMessage(msg);
    }

你可能感兴趣的:(Weex踩坑记录(长期更新))