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

Commit

Permalink
[Android] Fix Android JNI Crash (#2827)
Browse files Browse the repository at this point in the history
* [Android] Fix Android JNI Crash

`jni_object()` in `ReportException()` could be nullptr if `InitFramework()` is not invoked.

```
JNI DETECTED ERROR IN APPLICATION: obj == null
 in call to CallVoidMethodV
from int com.taobao.weex.bridge.WXBridge.nativeCreateInstanceContext(java.lang.String, java.lang.String, java.lang.String, com.taobao.weex.bridge.WXJSObject[])
......

(_JNIEnv::CallVoidMethod(_jobject*, _jmethodID*, ...)+22)
(WeexCore::WXBridge::ReportException(_JNIEnv*, char const*, char const*, char const*)+132)
 (WeexCore::AndroidSide::ReportException(char const*, char const*, char const*)+34)
......

(WeexCore::CoreSideInPlatform::CreateInstance(char const*, char const*, char const*, int, char const*, char const*, char const*, std::__ndk1::vector<InitFrameworkParams*, std::__ndk1::allocator<InitFrameworkParams*>>&, char const*)+820)
at com.taobao.weex.bridge.WXBridge.nativeCreateInstanceContext(Native method)
at com.taobao.weex.bridge.WXBridge.createInstanceContext(Taobao:233)
at com.taobao.weex.bridge.WXBridgeManager.invokeCreateInstanceContext(Taobao:1981)
at com.taobao.weex.bridge.WXBridgeManager.invokeCreateInstance(Taobao:1709)
```

* Fix crash in EagleBridge::WeexCoreHandler::PostTaskToMsgLoop

message_loop() in PostTaskToMsgLoop() could be nullptr if InitFramework() is not invoked.

* Avoid multiple initialization.

* Revert changes of InitSciptThread

* Post successCallback in RequestHandler to JSThread.

* Revert "Post successCallback in RequestHandler to JSThread."

This reverts commit 04bc406

* Delete `;`
  • Loading branch information
YorkShen authored and lucky-chen committed Aug 15, 2019
1 parent 5df2e4e commit 7e54ac5
Showing 1 changed file with 6 additions and 2 deletions.
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

0 comments on commit 7e54ac5

Please sign in to comment.