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 *> ¶ms) 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 *> ¶ms) 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 *> ¶ms, 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);