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/05/07 07:52:43 UTC
[10/52] [abbrv] incubator-weex git commit: [WeexCore] merge devTool
[WeexCore] merge devTool
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/f4cdc0f4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/f4cdc0f4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/f4cdc0f4
Branch: refs/heads/master
Commit: f4cdc0f4713c4c66438fe87ad4abfde673a9aa99
Parents: 413b065
Author: 立省 <li...@alibaba-inc.com>
Authored: Thu Apr 26 15:40:22 2018 +0800
Committer: YorkShen <sh...@gmail.com>
Committed: Mon May 7 15:52:07 2018 +0800
----------------------------------------------------------------------
.../gradle/wrapper/gradle-wrapper.properties | 2 +-
weex_core/Source/CMakeLists.txt | 1 +
.../bridge/impl/WXJsFunction_Impl_Android.cpp | 253 +++++++++++++++++++
.../bridge/impl/WXJsFunction_Impl_Android.h | 13 +
.../Source/android/jniprebuild/jni_load.cc | 2 +
5 files changed, 270 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f4cdc0f4/android/sdk/gradle/wrapper/gradle-wrapper.properties
----------------------------------------------------------------------
diff --git a/android/sdk/gradle/wrapper/gradle-wrapper.properties b/android/sdk/gradle/wrapper/gradle-wrapper.properties
index d649982..73990aa 100644
--- a/android/sdk/gradle/wrapper/gradle-wrapper.properties
+++ b/android/sdk/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=http://gw.alicdn.com/bao/uploaded/LB1J5WLJVXXXXcMXpXXXXXXXXXX.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f4cdc0f4/weex_core/Source/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/weex_core/Source/CMakeLists.txt b/weex_core/Source/CMakeLists.txt
index 92ce3ae..a3ff046 100644
--- a/weex_core/Source/CMakeLists.txt
+++ b/weex_core/Source/CMakeLists.txt
@@ -35,6 +35,7 @@ add_library(weexjsc SHARED
./android/bridge/impl/weexcore_impl_android.cpp
./android/bridge/impl/measure_mode_impl_android.cpp
./android/bridge/impl/content_box_measurement_impl_android.cpp
+ ./android/bridge/impl/WXJsFunction_Impl_Android.cpp
./android/jsengine/multiprocess/WeexJSConnection.cpp
./android/jsengine/multiprocess/WeexProxy.cpp
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f4cdc0f4/weex_core/Source/android/bridge/impl/WXJsFunction_Impl_Android.cpp
----------------------------------------------------------------------
diff --git a/weex_core/Source/android/bridge/impl/WXJsFunction_Impl_Android.cpp b/weex_core/Source/android/bridge/impl/WXJsFunction_Impl_Android.cpp
new file mode 100644
index 0000000..f391654
--- /dev/null
+++ b/weex_core/Source/android/bridge/impl/WXJsFunction_Impl_Android.cpp
@@ -0,0 +1,253 @@
+//
+// Created by Darin on 27/03/2018.
+//
+
+#include "WXJsFunction_Impl_Android.h"
+#include "../../base/string/string_utils.h"
+#include "../../jniprebuild/jniheader/WXJsFunctions_jni.h"
+#include "bridge_impl_android.h"
+#include "../../../core/render/manager/render_manager.h"
+
+using namespace WeexCore;
+
+extern jobject jThis;
+extern jclass jBridgeClazz;
+
+namespace WeexCore {
+ bool RegisterWXJsFunction(JNIEnv *env) {
+ RegisterNativesImpl(env);
+ }
+}
+
+static const char *getCharFromJByte(JNIEnv *env, jbyteArray jbyteArray1) {
+ if (jbyteArray1 == nullptr)
+ return "";
+
+ return jByteArray2Str(env, jbyteArray1).c_str();
+}
+
+static const char *getCharFromJString(JNIEnv *env, jstring string) {
+ if (string == nullptr)
+ return "";
+ return env->GetStringUTFChars(string, nullptr);
+}
+
+void initWxBridge(JNIEnv *env, jobject object, jobject bridge, jstring className) {
+ jThis = env->NewGlobalRef(bridge);
+ const char *classNameChar = env->GetStringUTFChars(className, 0);
+ jclass tempClass = env->FindClass(classNameChar);
+ jBridgeClazz = (jclass) env->NewGlobalRef(tempClass);
+ Bridge_Impl_Android::getInstance()->setGlobalRef(jThis);
+}
+
+void jsHandleSetJSVersion(JNIEnv *env, jobject object, jstring jsVersion) {
+ Bridge_Impl_Android::getInstance()->setJSVersion(getCharFromJString(env, jsVersion));
+}
+
+void jsHandleReportException(JNIEnv *env, jobject object, jstring instanceId, jstring func,
+ jstring exceptionjstring) {
+ Bridge_Impl_Android::getInstance()->reportException(getCharFromJString(env, instanceId),
+ getCharFromJString(env, func),
+ getCharFromJString(env,
+ exceptionjstring));
+}
+
+void jsHandleCallNative(JNIEnv *env, jobject object, jstring instanceId, jbyteArray tasks,
+ jstring callback) {
+ std::string pageId = jString2StrFast(env, instanceId);
+ std::string task = jByteArray2Str(env, tasks);
+
+#if JSAPI_LOG
+ LOGD("[ExtendJSApi] handleCallNative >>>> pageId: %s, task: %s", pageId.c_str(), task.c_str());
+#endif
+
+ if (task == "[{\"module\":\"dom\",\"method\":\"createFinish\",\"args\":[]}]") {
+ RenderManager::GetInstance()->CreateFinish(pageId) ? 0 : -1;
+ env->DeleteLocalRef(instanceId);
+ env->DeleteLocalRef(tasks);
+ env->DeleteLocalRef(callback);
+ } else {
+ Bridge_Impl_Android::getInstance()->callNative(getCharFromJString(env, instanceId),
+ task.c_str(),
+ getCharFromJString(env, callback));
+ }
+}
+
+void
+jsHandleCallNativeModule(JNIEnv *env, jobject object, jstring instanceId, jstring module,
+ jstring method, jbyteArray
+ arguments, jbyteArray options) {
+
+
+#if JSAPI_LOG
+ LOGD("[ExtendJSApi] handleCallNativeModule >>>> pageId: %s, module: %s, method: %s, arg: %s",
+ jString2StrFast(env, jInstanceId).c_str(), jString2StrFast(env, jmodule).c_str(),
+ jString2StrFast(env, jmethod).c_str(), jByteArray2Str(env, jArgString).c_str());
+#endif
+
+ // add for android support
+ jobject result;
+ result = Bridge_Impl_Android::getInstance()->callNativeModule(
+ getCharFromJString(env, instanceId),
+ getCharFromJString(env, module),
+ getCharFromJString(env, method),
+ getCharFromJByte(env, arguments),
+ getCharFromJByte(env, options));
+
+ jfieldID jTypeId = env->GetFieldID(jWXJSObject, "type", "I");
+ jint jTypeInt = env->GetIntField(result, jTypeId);
+ jfieldID jDataId = env->GetFieldID(jWXJSObject, "data", "Ljava/lang/Object;");
+ jobject jDataObj = env->GetObjectField(result, jDataId);
+ if (jTypeInt == 1) {
+ if (jDoubleValueMethodId == NULL) {
+ jclass jDoubleClazz = env->FindClass("java/lang/Double");
+ jDoubleValueMethodId = env->GetMethodID(jDoubleClazz, "doubleValue", "()D");
+ env->DeleteLocalRef(jDoubleClazz);
+ }
+ jdouble jDoubleObj = env->CallDoubleMethod(jDataObj, jDoubleValueMethodId);
+ } else if (jTypeInt == 2) {
+ jstring jDataStr = (jstring) jDataObj;
+ //ret = std::move(createStringResult(env, jDataStr));
+ } else if (jTypeInt == 3) {
+ jstring jDataStr = (jstring) jDataObj;
+ //ret = std::move(createJSONStringResult(env, jDataStr));
+ }
+ env->DeleteLocalRef(jDataObj);
+ //return ret;
+}
+
+void
+jsHandleCallNativeComponent(JNIEnv *env, jobject object, jstring instanceId, jstring componentRef,
+ jstring method,
+ jbyteArray arguments, jbyteArray options) {
+
+ Bridge_Impl_Android::getInstance()->callNativeComponent(getCharFromJString(env, instanceId),
+ getCharFromJString(env, componentRef),
+ getCharFromJString(env, method),
+ getCharFromJByte(env, arguments),
+ getCharFromJByte(env, options));
+
+}
+
+void
+jsHandleCallAddElement(JNIEnv *env, jobject object, jstring instanceId, jstring ref, jstring dom,
+ jstring index) {
+
+ const char *instanceChar = env->GetStringUTFChars(instanceId, 0);
+ const char *refChar = env->GetStringUTFChars(ref, 0);
+ const char *domChar = env->GetStringUTFChars(dom, 0);
+ const char *indexChar = env->GetStringUTFChars(index, 0);
+
+ int indexI = atoi(indexChar);
+ if (instanceChar == nullptr || refChar == nullptr || domChar == nullptr ||
+ indexChar == nullptr ||
+ indexI < -1)
+ return;
+
+ RenderManager::GetInstance()->AddRenderObject(instanceChar, refChar, indexI, domChar);
+}
+
+void jsHandleSetTimeout(JNIEnv *env, jobject object, jstring callbackId, jstring time) {
+
+ Bridge_Impl_Android::getInstance()->setTimeout(getCharFromJString(env, callbackId),
+ getCharFromJString(env, time));
+
+}
+
+void jsHandleCallNativeLog(JNIEnv *env, jobject object, jbyteArray str_array) {
+ Bridge_Impl_Android::getInstance()->callNativeLog(getCharFromJByte(env, str_array));
+}
+
+void jsFunctionCallCreateBody(JNIEnv *env, jobject object, jstring pageId, jstring domStr) {
+
+ if (pageId == nullptr || domStr == nullptr)
+ return;
+
+ const char *page = env->GetStringUTFChars(pageId, NULL);
+ const char *dom = env->GetStringUTFChars(domStr, NULL);
+ if (page == nullptr || dom == nullptr || strlen(dom) == 0)
+ return;
+ RenderManager::GetInstance()->CreatePage(page, dom);
+}
+
+void
+jsFunctionCallUpdateFinish(JNIEnv *env, jobject object, jstring instanceId, jbyteArray tasks,
+ jstring callback) {
+
+ Bridge_Impl_Android::getInstance()->callUpdateFinish(getCharFromJString(env, instanceId),
+ getCharFromJByte(env, tasks),
+ getCharFromJString(env, callback));
+
+}
+
+void jsFunctionCallCreateFinish(JNIEnv *env, jobject object, jstring pageId) {
+ RenderManager::GetInstance()->CreateFinish(env->GetStringUTFChars(pageId, 0));
+}
+
+void
+jsFunctionCallRefreshFinish(JNIEnv *env, jobject object, jstring instanceId, jbyteArray tasks,
+ jstring callback) {
+ Bridge_Impl_Android::getInstance()->callRefreshFinish(getCharFromJString(env, instanceId),
+ getCharFromJByte(env, tasks),
+ getCharFromJString(env, callback));
+}
+
+void
+jsFunctionCallUpdateAttrs(JNIEnv *env, jobject object, jstring pageId, jstring ref, jstring data) {
+ RenderManager::GetInstance()->UpdateAttr(env->GetStringUTFChars(pageId, 0),
+ env->GetStringUTFChars(ref, 0),
+ env->GetStringUTFChars(data, 0));
+}
+
+void
+jsFunctionCallUpdateStyle(JNIEnv *env, jobject object, jstring pageId, jstring ref, jstring data) {
+ RenderManager::GetInstance()->UpdateStyle(env->GetStringUTFChars(pageId, 0),
+ env->GetStringUTFChars(ref, 0),
+ env->GetStringUTFChars(data, 0));
+}
+
+void jsFunctionCallRemoveElement(JNIEnv *env, jobject object, jstring pageId, jstring ref) {
+
+ RenderManager::GetInstance()->RemoveRenderObject(env->GetStringUTFChars(pageId, 0),
+ env->GetStringUTFChars(ref, 0));
+
+}
+
+void
+jsFunctionCallMoveElement(JNIEnv *env, jobject object, jstring pageId, jstring ref,
+ jstring parentRef, jstring index_str) {
+
+ int index = atoi(env->GetStringUTFChars(index_str, 0));
+
+ RenderManager::GetInstance()->MoveRenderObject(env->GetStringUTFChars(pageId, 0),
+ env->GetStringUTFChars(ref, 0),
+ env->GetStringUTFChars(parentRef, 0), index);
+
+}
+
+void
+jsFunctionCallAddEvent(JNIEnv *env, jobject object, jstring pageId, jstring ref, jstring event) {
+ RenderManager::GetInstance()->AddEvent(env->GetStringUTFChars(pageId, 0),
+ env->GetStringUTFChars(ref, 0),
+ env->GetStringUTFChars(event, 0));
+
+}
+
+void
+jsFunctionCallRemoveEvent(JNIEnv *env, jobject object, jstring pageId, jstring ref,
+ jstring event) {
+
+ RenderManager::GetInstance()->RemoveEvent(env->GetStringUTFChars(pageId, 0),
+ env->GetStringUTFChars(ref, 0),
+ env->GetStringUTFChars(event, 0));
+
+}
+
+void jsHandleSetInterval(JNIEnv *env, jobject object, jstring instanceId, jstring callbackId,
+ jstring time) {}
+
+void
+jsHandleClearInterval(JNIEnv *env, jobject object, jstring instanceId, jstring callbackId) {}
+
+void jsHandleCallGCanvasLinkNative(JNIEnv *env, jobject object, jstring contextId, int type,
+ jstring val) {}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f4cdc0f4/weex_core/Source/android/bridge/impl/WXJsFunction_Impl_Android.h
----------------------------------------------------------------------
diff --git a/weex_core/Source/android/bridge/impl/WXJsFunction_Impl_Android.h b/weex_core/Source/android/bridge/impl/WXJsFunction_Impl_Android.h
new file mode 100644
index 0000000..1dd74cb
--- /dev/null
+++ b/weex_core/Source/android/bridge/impl/WXJsFunction_Impl_Android.h
@@ -0,0 +1,13 @@
+//
+// Created by Darin on 27/03/2018.
+//
+
+#ifndef WEEX_PROJECT_WXJSFUNCTION_IMPL_ANDROID_H
+#define WEEX_PROJECT_WXJSFUNCTION_IMPL_ANDROID_H
+
+#include <jni.h>
+
+namespace WeexCore {
+ bool RegisterWXJsFunction(JNIEnv *env);
+}
+#endif //WEEX_PROJECT_WXJSFUNCTION_IMPL_ANDROID_H
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/f4cdc0f4/weex_core/Source/android/jniprebuild/jni_load.cc
----------------------------------------------------------------------
diff --git a/weex_core/Source/android/jniprebuild/jni_load.cc b/weex_core/Source/android/jniprebuild/jni_load.cc
index c731870..e7cfe40 100644
--- a/weex_core/Source/android/jniprebuild/jni_load.cc
+++ b/weex_core/Source/android/jniprebuild/jni_load.cc
@@ -3,6 +3,7 @@
#include <android/base/jni/android_jni.h>
#include <android/bridge/impl/measure_mode_impl_android.h>
#include <android/bridge/impl/content_box_measurement_impl_android.h>
+#include <android/bridge/impl/WXJsFunction_Impl_Android.h>
jint JNI_OnLoad (JavaVM *vm, void *reserved)
{
@@ -16,6 +17,7 @@ jint JNI_OnLoad (JavaVM *vm, void *reserved)
WeexCore::RegisterJNIUtils(env);
WeexCore::RegisterJNIMeasureMode(env);
WeexCore::RegisterJNIContentBoxMeasurement(env);
+ WeexCore::RegisterWXJsFunction(env);
return WeexCore::OnLoad(vm, reserved);
}