[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: ç«ç <listen...@alibaba-inc.com> Authored: Thu Apr 26 15:40:22 2018 +0800 Committer: YorkShen <shenyua...@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); }