Skip to content
This repository has been archived by the owner on Jun 3, 2021. It is now read-only.

[Android] Fix Android JNI Crash #2827

Merged
merged 9 commits into from
Aug 15, 2019
8 changes: 6 additions & 2 deletions weex_core/Source/android/wrap/wx_bridge.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@
#include "base/android/jni_type.h"
#include "base/android/jni/jbytearray_ref.h"
#include "base/android/jniprebuild/jniheader/WXBridge_jni.h"
#include "base/log_defines.h"
#include "core/config/core_environment.h"
#include "core/layout/layout.h"
#include "core/layout/measure_func_adapter_impl_android.h"
Expand Down Expand Up @@ -305,7 +304,9 @@ static void SetDeviceDisplay(JNIEnv* env, jobject jcaller, jstring instanceId,

static jint InitFramework(JNIEnv* env, jobject object, jstring script,
jobject params) {
WXBridge::Instance()->Reset(env, object);
if (!WXBridge::Instance()->jni_object()) {
WXBridge::Instance()->Reset(env, object);
}
// Init platform thread --- ScriptThread
WeexCoreManager::Instance()->InitScriptThread();
// Exception handler for so
Expand Down Expand Up @@ -620,6 +621,9 @@ static jint CreateInstanceContext(JNIEnv* env, jobject jcaller,

// If strategy is DATA_RENDER_BINARY, jscript is a jbyteArray, otherwise jstring
// TODO use better way
if (!WXBridge::Instance()->jni_object()) {
WXBridge::Instance()->Reset(env, jcaller);
}
if (scoped_render_strategy.getChars() != nullptr
&& strcmp(scoped_render_strategy.getChars(), "DATA_RENDER_BINARY") == 0) {
JByteArrayRef byte_array(env, static_cast<jbyteArray>(jscript.Get()));
Expand Down