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);
 }