You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ky...@apache.org on 2018/12/20 07:50:08 UTC

[incubator-weex] branch master updated: add Extra options to createInstance (#1943)

This is an automated email from the ASF dual-hosted git repository.

kyork pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-weex.git


The following commit(s) were added to refs/heads/master by this push:
     new 5d33cd7  add Extra options to createInstance  (#1943)
5d33cd7 is described below

commit 5d33cd7c4f02b4c1044ac779a6ce1417709cc41e
Author: darin <dy...@qq.com>
AuthorDate: Thu Dec 20 15:50:03 2018 +0800

    add Extra options to createInstance  (#1943)
    
    * Add extra options to Create instance
    
    * Merge libweexjss.so
    
    * Do not exec switchInteractionLog
---
 android/sdk/libs/armeabi-v7a/libweexjss.so         | Bin 341572 -> 341580 bytes
 android/sdk/libs/armeabi/libweexjss.so             | Bin 341572 -> 341580 bytes
 .../com/taobao/weex/bridge/WXBridgeManager.java    |  13 ++++++++++-
 .../weex/performance/WXAnalyzerDataTransfer.java   |  25 +++++++++++----------
 .../bridge/platform/core_side_in_multi_process.cpp |   7 ++++--
 .../bridge/platform/core_side_in_multi_process.h   |   2 +-
 .../bridge/platform/core_side_in_multi_so.cpp      |   4 ++--
 .../bridge/platform/core_side_in_multi_so.h        |   2 +-
 .../bridge/script/script_side_in_multi_process.cpp |   7 ++++--
 .../bridge/script/script_side_in_multi_process.h   |   2 +-
 .../bridge/script/script_side_in_multi_so.cpp      |   4 ++--
 .../bridge/script/script_side_in_multi_so.h        |   2 +-
 weex_core/Source/android/wrap/wx_bridge.cpp        |  25 ++++++++++++++++++---
 .../core/bridge/platform/core_side_in_platform.cpp |   7 +++---
 .../core/bridge/platform/core_side_in_platform.h   |   2 +-
 weex_core/Source/core/bridge/platform_bridge.h     |   2 +-
 weex_core/Source/core/bridge/script_bridge.h       |   2 +-
 weex_core/Source/include/WeexApiHeader.h           |   2 +-
 18 files changed, 73 insertions(+), 35 deletions(-)

diff --git a/android/sdk/libs/armeabi-v7a/libweexjss.so b/android/sdk/libs/armeabi-v7a/libweexjss.so
index 50e261a..8bab6c1 100755
Binary files a/android/sdk/libs/armeabi-v7a/libweexjss.so and b/android/sdk/libs/armeabi-v7a/libweexjss.so differ
diff --git a/android/sdk/libs/armeabi/libweexjss.so b/android/sdk/libs/armeabi/libweexjss.so
index 50e261a..8bab6c1 100755
Binary files a/android/sdk/libs/armeabi/libweexjss.so and b/android/sdk/libs/armeabi/libweexjss.so differ
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
index 83cb708..9066644 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@ -1459,6 +1459,17 @@ public class WXBridgeManager implements Callback, BactchExecutor {
         WXJSObject instanceObj = new WXJSObject(WXJSObject.String,
                 template.getContent());
 
+        Object extraOption = null;
+        if(options != null && options.containsKey("extraOption")) {
+           extraOption = options.get("extraOption");
+           options.remove("extraOption");
+        }
+
+        WXJSObject extraOptionObj = new WXJSObject(WXJSObject.JSON,
+                extraOption == null ? "{}"
+                        : WXJsonUtils.fromObjectToJSONString(extraOption));
+
+
         WXJSObject optionsObj = new WXJSObject(WXJSObject.JSON,
                 options == null ? "{}"
                         : WXJsonUtils.fromObjectToJSONString(options));
@@ -1496,7 +1507,7 @@ public class WXBridgeManager implements Callback, BactchExecutor {
         }
 
         WXJSObject[] args = {instanceIdObj, instanceObj, optionsObj,
-                dataObj, apiObj, renderStrategy};
+                dataObj, apiObj, renderStrategy, extraOptionObj};
 
         instance.setTemplate(template.getContent());
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/performance/WXAnalyzerDataTransfer.java b/android/sdk/src/main/java/com/taobao/weex/performance/WXAnalyzerDataTransfer.java
index dc53c13..0a42e2e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/performance/WXAnalyzerDataTransfer.java
+++ b/android/sdk/src/main/java/com/taobao/weex/performance/WXAnalyzerDataTransfer.java
@@ -142,18 +142,19 @@ public class WXAnalyzerDataTransfer {
       }
       sOpenInteractionLog = isOpen;
       //for jsfm && jsengin
-      WXBridgeManager.getInstance().post(new Runnable() {
-          @Override
-          public void run() {
-              WXJSObject[] args = {new WXJSObject(isOpen?1:0)};
-              WXBridgeManager.getInstance().invokeExecJS(
-                  "",
-                  null,
-                  "switchInteractionLog",
-                  args,
-                  false);
-          }
-      });
+      //TODO wait for JSFramework
+//      WXBridgeManager.getInstance().post(new Runnable() {
+//          @Override
+//          public void run() {
+//              WXJSObject[] args = {new WXJSObject(isOpen?1:0)};
+//              WXBridgeManager.getInstance().invokeExecJS(
+//                  "",
+//                  null,
+//                  "switchInteractionLog",
+//                  args,
+//                  false);
+//          }
+//      });
       //for weex_core
       WXBridgeManager.getInstance().registerCoreEnv("switchInteractionLog",String.valueOf(isOpen));
   }
diff --git a/weex_core/Source/android/bridge/platform/core_side_in_multi_process.cpp b/weex_core/Source/android/bridge/platform/core_side_in_multi_process.cpp
index b1091d3..dbd668c 100644
--- a/weex_core/Source/android/bridge/platform/core_side_in_multi_process.cpp
+++ b/weex_core/Source/android/bridge/platform/core_side_in_multi_process.cpp
@@ -571,7 +571,7 @@ namespace WeexCore {
 
     int CoreSideInMultiProcess::CreateInstance(const char *instanceId, const char *func,
                                            const char *script, const char *opts,
-                                           const char *initData, const char *extendsApi,
+                                           const char *initData, const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params,
                                            const char* render_strategy) {
         try {
             std::unique_ptr<IPCSerializer> serializer(createIPCSerializer());
@@ -582,7 +582,10 @@ namespace WeexCore {
             serializer->add(opts, strlen(opts));
             serializer->add(initData, strlen(initData));
             serializer->add(extendsApi, strlen(extendsApi));
-
+            for (auto it = params.begin(); it != params.end(); ++it) {
+                serializer->add((*it)->type->content, (*it)->type->length);
+                serializer->add((*it)->value->content, (*it)->value->length);
+            }
             std::unique_ptr<IPCBuffer> buffer = serializer->finish();
             std::unique_ptr<IPCResult> result = sender_->send(buffer.get());
             if (result->getType() != IPCType::INT32) {
diff --git a/weex_core/Source/android/bridge/platform/core_side_in_multi_process.h b/weex_core/Source/android/bridge/platform/core_side_in_multi_process.h
index e0fa836..809d498 100644
--- a/weex_core/Source/android/bridge/platform/core_side_in_multi_process.h
+++ b/weex_core/Source/android/bridge/platform/core_side_in_multi_process.h
@@ -95,7 +95,7 @@ class CoreSideInMultiProcess : public PlatformBridge::CoreSide {
       std::vector<VALUE_WITH_TYPE *> &params) override;
   int CreateInstance(const char *instanceId, const char *func,
                      const char *script, const char *opts, const char *initData,
-                     const char *extendsApi,
+                     const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params,
                      const char *render_strategy) override;
   std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId,
                                const char *script) override;
diff --git a/weex_core/Source/android/bridge/platform/core_side_in_multi_so.cpp b/weex_core/Source/android/bridge/platform/core_side_in_multi_so.cpp
index 30db5ca..a627a93 100644
--- a/weex_core/Source/android/bridge/platform/core_side_in_multi_so.cpp
+++ b/weex_core/Source/android/bridge/platform/core_side_in_multi_so.cpp
@@ -205,9 +205,9 @@ std::unique_ptr<WeexJSResult> CoreSideInMultiSo::ExecJSWithResult(
 int CoreSideInMultiSo::CreateInstance(const char *instanceId, const char *func,
                                       const char *script, const char *opts,
                                       const char *initData,
-                                      const char *extendsApi, const char* render_strategy) {
+                                      const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params, const char* render_strategy) {
   return core_side_functions_->create_instance(instanceId, func, script, opts,
-                                               initData, extendsApi);
+                                               initData, extendsApi,params);
 }
 
 std::unique_ptr<WeexJSResult> CoreSideInMultiSo::ExecJSOnInstance(const char *instanceId,
diff --git a/weex_core/Source/android/bridge/platform/core_side_in_multi_so.h b/weex_core/Source/android/bridge/platform/core_side_in_multi_so.h
index c68e048..df3d54c 100644
--- a/weex_core/Source/android/bridge/platform/core_side_in_multi_so.h
+++ b/weex_core/Source/android/bridge/platform/core_side_in_multi_so.h
@@ -96,7 +96,7 @@ class CoreSideInMultiSo : public PlatformBridge::CoreSide {
                                   std::vector<VALUE_WITH_TYPE *> &params) override;
     int CreateInstance(const char *instanceId, const char *func,
                        const char *script, const char *opts, const char *initData,
-                       const char *extendsApi, const char* render_strategy) override;
+                       const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params, const char* render_strategy) override;
     std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId, const char *script) override;
     int DestroyInstance(const char *instanceId) override;
     int UpdateGlobalConfig(const char *config) override;
diff --git a/weex_core/Source/android/bridge/script/script_side_in_multi_process.cpp b/weex_core/Source/android/bridge/script/script_side_in_multi_process.cpp
index 19ecd99..9217f78 100644
--- a/weex_core/Source/android/bridge/script/script_side_in_multi_process.cpp
+++ b/weex_core/Source/android/bridge/script/script_side_in_multi_process.cpp
@@ -433,7 +433,7 @@ void ScriptSideInMultiProcess::ExecJSWithCallback(
 
 int ScriptSideInMultiProcess::CreateInstance(
     const char *instanceId, const char *func, const char *script,
-    const char *opts, const char *initData, const char *extendsApi) {
+    const char *opts, const char *initData, const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) {
   try {
 
     if(sender_ == nullptr) {
@@ -449,7 +449,10 @@ int ScriptSideInMultiProcess::CreateInstance(
     serializer->add(opts, strlen(opts));
     serializer->add(initData, strlen(initData));
     serializer->add(extendsApi, strlen(extendsApi));
-
+    for (auto it = params.begin(); it != params.end(); ++it) {
+      serializer->add((*it)->type->content, (*it)->type->length);
+      serializer->add((*it)->value->content, (*it)->value->length);
+    }
     std::unique_ptr<IPCBuffer> buffer = serializer->finish();
     std::unique_ptr<IPCResult> result = sender_->send(buffer.get());
     if (result->getType() != IPCType::INT32) {
diff --git a/weex_core/Source/android/bridge/script/script_side_in_multi_process.h b/weex_core/Source/android/bridge/script/script_side_in_multi_process.h
index 24d243a..0cc4e2d 100644
--- a/weex_core/Source/android/bridge/script/script_side_in_multi_process.h
+++ b/weex_core/Source/android/bridge/script/script_side_in_multi_process.h
@@ -62,7 +62,7 @@ class ScriptSideInMultiProcess : public ScriptBridge::ScriptSide {
 
   int CreateInstance(const char *instanceId, const char *func,
                      const char *script, const char *opts, const char *initData,
-                     const char *extendsApi) override;
+                     const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) override;
 
   std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId, const char *script) override;
 
diff --git a/weex_core/Source/android/bridge/script/script_side_in_multi_so.cpp b/weex_core/Source/android/bridge/script/script_side_in_multi_so.cpp
index 02f063b..c43ea28 100644
--- a/weex_core/Source/android/bridge/script/script_side_in_multi_so.cpp
+++ b/weex_core/Source/android/bridge/script/script_side_in_multi_so.cpp
@@ -140,13 +140,13 @@ void ScriptSideInMultiSo::ExecJSWithCallback(
 int ScriptSideInMultiSo::CreateInstance(const char *instanceId,
                                         const char *func, const char *script,
                                         const char *opts, const char *initData,
-                                        const char *extendsApi) {
+                                        const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) {
   if(script_side_functions_ == nullptr) {
     LOGE("ScriptSideInMultiSo::CreateInstance script_side_functions_ is null");
     return false;
   }
   return script_side_functions_->funcCreateInstance(instanceId, func, script,
-                                                    opts, initData, extendsApi);
+                                                    opts, initData, extendsApi,params);
 }
 
 std::unique_ptr<WeexJSResult> ScriptSideInMultiSo::ExecJSOnInstance(const char *instanceId,
diff --git a/weex_core/Source/android/bridge/script/script_side_in_multi_so.h b/weex_core/Source/android/bridge/script/script_side_in_multi_so.h
index 87ed718..d8d0f3f 100644
--- a/weex_core/Source/android/bridge/script/script_side_in_multi_so.h
+++ b/weex_core/Source/android/bridge/script/script_side_in_multi_so.h
@@ -61,7 +61,7 @@ class ScriptSideInMultiSo : public ScriptBridge::ScriptSide {
 
   int CreateInstance(const char *instanceId, const char *func,
                      const char *script, const char *opts, const char *initData,
-                     const char *extendsApi) override;
+                     const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) override;
 
   std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId, const char *script) override;
 
diff --git a/weex_core/Source/android/wrap/wx_bridge.cpp b/weex_core/Source/android/wrap/wx_bridge.cpp
index 2e9cf92..bc0344f 100644
--- a/weex_core/Source/android/wrap/wx_bridge.cpp
+++ b/weex_core/Source/android/wrap/wx_bridge.cpp
@@ -511,6 +511,10 @@ static jint CreateInstanceContext(JNIEnv* env, jobject jcaller,
       new WXJSObject(env, base::android::ScopedLocalJavaRef<jobject>(
           env, env->GetObjectArrayElement(args, 5))
           .Get()));
+
+  auto extraOptionString = base::android::ScopedLocalJavaRef<jstring>(
+          env, getJsonData(env, args, 6));
+
   auto japi = arg4->GetData(env);
   ScopedJStringUTF8 scoped_id(env, instanceId);
   ScopedJStringUTF8 scoped_func(env, function);
@@ -519,7 +523,22 @@ static jint CreateInstanceContext(JNIEnv* env, jobject jcaller,
   ScopedJStringUTF8 scoped_api(env, static_cast<jstring>(japi.Get()));
   ScopedJStringUTF8 scoped_render_strategy(
       env, static_cast<jstring>(render_strategy->GetData(env).Release()));
-
+  ScopedJStringUTF8 scoped_extra_option(env, extraOptionString.Get());
+
+  std::string err;
+  const std::string input = scoped_extra_option.getChars();
+  const json11::Json &json = json11::Json::parse(input, err);
+
+  const std::map<std::string, json11::Json> &data = json.object_items();
+  auto it = data.begin();
+  std::vector<INIT_FRAMEWORK_PARAMS*> params;
+  while (it != data.end()) {
+    INIT_FRAMEWORK_PARAMS *param = nullptr;
+    const std::string &string = it->second.string_value();
+    param = WeexCore::genInitFrameworkParams(it->first.c_str(),it->second.string_value().c_str());
+    params.push_back(param);
+    it++;
+  }
   // If strategy is DATA_RENDER_BINARY, jscript is a jbyteArray, otherwise jstring
   // TODO use better way
   if (scoped_render_strategy.getChars() != nullptr
@@ -530,7 +549,7 @@ static jint CreateInstanceContext(JNIEnv* env, jobject jcaller,
         ->core_side()
         ->CreateInstance(scoped_id.getChars(), scoped_func.getChars(),
                          byte_array.getBytes(), byte_array.length(), scoped_opts.getChars(),
-                         scoped_init_data.getChars(), scoped_api.getChars(),
+                         scoped_init_data.getChars(), scoped_api.getChars(), params,
                          scoped_render_strategy.getChars());
   } else {
     ScopedJStringUTF8 scoped_script(env, static_cast<jstring>(jscript.Get()));
@@ -540,7 +559,7 @@ static jint CreateInstanceContext(JNIEnv* env, jobject jcaller,
         ->CreateInstance(scoped_id.getChars(), scoped_func.getChars(),
                          scoped_script.getChars(), strlen(scoped_script.getChars()),
                          scoped_opts.getChars(),
-                         scoped_init_data.getChars(), scoped_api.getChars(),
+                         scoped_init_data.getChars(), scoped_api.getChars(),params,
                          scoped_render_strategy.getChars());
   }
 
diff --git a/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp b/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp
index b767ed4..8c5cca3 100644
--- a/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp
+++ b/weex_core/Source/core/bridge/platform/core_side_in_platform.cpp
@@ -425,7 +425,7 @@ int CoreSideInPlatform::CreateInstance(const char *instanceId, const char *func,
                                        const char *script, int script_length,
                                        const char *opts,
                                        const char *initData,
-                                       const char *extendsApi,
+                                       const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params,
                                        const char *render_strategy) {
   // First check about DATA_RENDER mode
   if (render_strategy != nullptr) {
@@ -440,12 +440,13 @@ int CoreSideInPlatform::CreateInstance(const char *instanceId, const char *func,
               const_cast<std::map<std::string, json11::Json> &>(
                   opts_json.object_items());
           opts_map["bundleType"] = "Vue";
+          std::vector<INIT_FRAMEWORK_PARAMS*> params;
           WeexCoreManager::Instance()
               ->script_bridge()
               ->script_side()
               ->CreateInstance(instanceId.c_str(), func.c_str(), result,
                                opts_json.dump().c_str(), initData.c_str(),
-                               extendsApi.c_str());
+                               extendsApi.c_str(),params);
         };
     if (strcmp(render_strategy, "DATA_RENDER") == 0) {
       auto node_manager =
@@ -467,7 +468,7 @@ int CoreSideInPlatform::CreateInstance(const char *instanceId, const char *func,
   return WeexCoreManager::Instance()
       ->script_bridge()
       ->script_side()
-      ->CreateInstance(instanceId, func, script, opts, initData, extendsApi);
+      ->CreateInstance(instanceId, func, script, opts, initData, extendsApi, params);
 }
 
 std::unique_ptr<WeexJSResult> CoreSideInPlatform::ExecJSOnInstance(const char *instanceId,
diff --git a/weex_core/Source/core/bridge/platform/core_side_in_platform.h b/weex_core/Source/core/bridge/platform/core_side_in_platform.h
index 490c7d9..4a91584 100644
--- a/weex_core/Source/core/bridge/platform/core_side_in_platform.h
+++ b/weex_core/Source/core/bridge/platform/core_side_in_platform.h
@@ -97,7 +97,7 @@ class CoreSideInPlatform : public PlatformBridge::CoreSide {
                           long callback_id) override;
   int CreateInstance(const char *instanceId, const char *func,
                      const char *script, int script_length, const char *opts, const char *initData,
-                     const char *extendsApi, const char* render_strategy) override;
+                     const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params, const char* render_strategy) override;
   std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char *instanceId,
                                const char *script) override;
   int DestroyInstance(const char *instanceId) override;
diff --git a/weex_core/Source/core/bridge/platform_bridge.h b/weex_core/Source/core/bridge/platform_bridge.h
index 6b014ae..38602bb 100644
--- a/weex_core/Source/core/bridge/platform_bridge.h
+++ b/weex_core/Source/core/bridge/platform_bridge.h
@@ -119,7 +119,7 @@ class PlatformBridge {
                                     long callback_id) = 0;
     virtual int CreateInstance(const char* instanceId, const char* func,
                                const char* script, int script_length, const char* opts,
-                               const char* initData, const char* extendsApi,
+                               const char* initData, const char* extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params,
                                const char* render_strategy) = 0;
     virtual std::unique_ptr<WeexJSResult> ExecJSOnInstance(const char* instanceId,
                                          const char* script) = 0;
diff --git a/weex_core/Source/core/bridge/script_bridge.h b/weex_core/Source/core/bridge/script_bridge.h
index 7790792..9ba6f70 100644
--- a/weex_core/Source/core/bridge/script_bridge.h
+++ b/weex_core/Source/core/bridge/script_bridge.h
@@ -140,7 +140,7 @@ class ScriptBridge {
     virtual int CreateInstance(const char *instanceId, const char *func,
                                const char *script, const char *opts,
                                const char *initData,
-                               const char *extendsApi) = 0;
+                               const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params) = 0;
 
     virtual std::unique_ptr<WeexJSResult>  ExecJSOnInstance(const char *instanceId,
                                    const char *script) = 0;
diff --git a/weex_core/Source/include/WeexApiHeader.h b/weex_core/Source/include/WeexApiHeader.h
index 53b5ef6..9b00e02 100644
--- a/weex_core/Source/include/WeexApiHeader.h
+++ b/weex_core/Source/include/WeexApiHeader.h
@@ -287,7 +287,7 @@ typedef void(*FuncExeJSWithResultId)(const char *instanceId, const char *nameSpa
                                            std::vector<VALUE_WITH_TYPE *> &params, long callback_id);
 
 typedef int (*FuncCreateInstance)(const char *instanceId, const char *func, const char *script, const char *opts,
-                                  const char *initData, const char *extendsApi);
+                                  const char *initData, const char *extendsApi, std::vector<INIT_FRAMEWORK_PARAMS*>& params);
 
 typedef std::unique_ptr<WeexJSResult> (*FuncExeJSOnInstance)(const char *instanceId, const char *script);