cocos creator 基于2.0.5的github上的lite引擎源码 在安卓6.0 8.0的nexus和小米5sp上 在c++中调用ScriptEngine destroyInstance会闪退,v8 isolate getcurrent那里会报错

  • Creator 版本:lite 2.0.5

  • 目标平台: Android 6.0 / 8.0

  • 详细报错信息,包含调用堆栈:
    2018-12-18 14:04:01.985 1794-1794/? D/SogouIME: [onKeyDown] keycode = 4 model = MI 5s Plus
    2018-12-18 14:04:01.991 31057-31088/? I/vip_debug: start deal pending msg,size:10
    2018-12-18 14:04:02.015 31107-31107/org.cocos2dx.CocosProject205 I/COCOS: ReleaseCocos
    2018-12-18 14:04:02.016 31107-31107/org.cocos2dx.CocosProject205 E/CocosJava: isMainThread : true
    2018-12-18 14:04:02.016 31107-31107/org.cocos2dx.CocosProject205 D/jswrapper: ScriptEngine::cleanup begin …
    2018-12-18 14:04:02.017 31107-31107/org.cocos2dx.CocosProject205 A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0xe24 in tid 31107 (CocosProject205)
    2018-12-18 14:04:02.080 31403-31403/? W/ReflectionUtils: java.lang.NoSuchMethodException: android.os.MessageQueue#enableMonitor()#bestmatch
    at miui.util.ReflectionUtils.findMethodBestMatch(ReflectionUtils.java:338)
    at miui.util.ReflectionUtils.findMethodBestMatch(ReflectionUtils.java:375)
    at miui.util.ReflectionUtils.callMethod(ReflectionUtils.java:800)
    at miui.util.ReflectionUtils.tryCallMethod(ReflectionUtils.java:818)
    at android.os.BaseLooper.enableMonitor(BaseLooper.java:47)
    at android.os.Looper.prepareMainLooper(Looper.java:112)
    at android.app.ActivityThread.main(ActivityThread.java:6342)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:770)
    2018-12-18 14:04:02.080 31403-31403/? V/BoostFramework: BoostFramework() : mPerf = com.qualcomm.qti.Performance@75f172a
    2018-12-18 14:04:02.094 4447-31393/? I/ChromeSync: [Sync,SyncIntentOperation] Handling the intent: Intent { act=android.intent.action.PACKAGE_ADDED dat=package:org.cocos2dx.CocosProject205 flg=0x4000010 cmp=com.google.android.gms/.chimera.GmsIntentOperationService (has extras) }.
    2018-12-18 14:04:02.094 4447-31396/? I/Auth: [SupervisedAccountIntentOperation] onHandleIntent(): android.intent.action.PACKAGE_ADDED
    2018-12-18 14:04:02.105 30958-30990/? D/ContactsDatabaseHelper: insertMimeType: vnd.android.cursor.item/sip_address
    2018-12-18 14:04:02.107 30958-30990/? D/ContactsDatabaseHelper: insertMimeType: vnd.android.cursor.item/name
    2018-12-18 14:04:02.107 31402-31402/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    2018-12-18 14:04:02.107 31402-31402/? A/DEBUG: Build fingerprint: ‘Xiaomi/natrium/natrium:7.0/NRD90M/V9.6.1.0.NBGCNFD:user/release-keys’
    2018-12-18 14:04:02.107 31402-31402/? A/DEBUG: Revision: ‘0’
    2018-12-18 14:04:02.107 31402-31402/? A/DEBUG: ABI: ‘arm’
    2018-12-18 14:04:02.107 31402-31402/? A/DEBUG: pid: 31107, tid: 31107, name: CocosProject205 >>> org.cocos2dx.CocosProject205 <<<
    2018-12-18 14:04:02.108 31402-31402/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xe24
    2018-12-18 14:04:02.108 31402-31402/? A/DEBUG: r0 00000000 r1 00000000 r2 00000000 r3 c97f6a88
    2018-12-18 14:04:02.108 31402-31402/? A/DEBUG: r4 00000000 r5 ffd4b890 r6 ffd4ba20 r7 ffd4b8d8
    2018-12-18 14:04:02.108 31402-31402/? A/DEBUG: r8 ffd4bc78 r9 e7308000 sl e730808c fp ffd4b83c
    2018-12-18 14:04:02.108 31402-31402/? A/DEBUG: ip c97c8dac sp ffd4b808 lr c9057449 pc c905744c cpsr 400f0030
    2018-12-18 14:04:02.113 31402-31402/? A/DEBUG: backtrace:
    2018-12-18 14:04:02.114 31402-31402/? A/DEBUG: #00 pc 009f444c /data/app/org.cocos2dx.CocosProject205-2/lib/arm/libcocos2djs.so
    2018-12-18 14:04:02.115 31402-31402/? A/DEBUG: #01 pc 009f449d /data/app/org.cocos2dx.CocosProject205-2/lib/arm/libcocos2djs.so
    2018-12-18 14:04:02.115 31402-31402/? A/DEBUG: #02 pc 003dd380 /data/app/org.cocos2dx.CocosProject205-2/lib/arm/libcocos2djs.so (_ZN2se15AutoHandleScopeC2Ev+36)
    2018-12-18 14:04:02.115 31402-31402/? A/DEBUG: #03 pc 006589a4 /data/app/org.cocos2dx.CocosProject205-2/lib/arm/libcocos2djs.so (_ZN2se12ScriptEngine7cleanupEv+120)
    2018-12-18 14:04:02.115 31402-31402/? A/DEBUG: #04 pc 00657d4c /data/app/org.cocos2dx.CocosProject205-2/lib/arm/libcocos2djs.so (_ZN2se12ScriptEngineD1Ev+20)
    2018-12-18 14:04:02.115 31402-31402/? A/DEBUG: #05 pc 00657a4c /data/app/org.cocos2dx.CocosProject205-2/lib/arm/libcocos2djs.so (_ZN2se12ScriptEngine15destroyInstanceEv+32)
    2018-12-18 14:04:02.115 31402-31402/? A/DEBUG: #06 pc 003e2017 /data/app/org.cocos2dx.CocosProject205-2/lib/arm/libcocos2djs.so (_ZN7cocos2d11ApplicationD2Ev+26)
    2018-12-18 14:04:02.115 31402-31402/? A/DEBUG: #07 pc 003dd4fc /data/app/org.cocos2dx.CocosProject205-2/lib/arm/libcocos2djs.so (_ZN11AppDelegateD2Ev+52)
    2018-12-18 14:04:02.115 31402-31402/? A/DEBUG: #08 pc 003dd544 /data/app/org.cocos2dx.CocosProject205-2/lib/arm/libcocos2djs.so (_ZN11AppDelegateD0Ev+20)
    2018-12-18 14:04:02.115 31402-31402/? A/DEBUG: #09 pc 003df1a1 /data/app/org.cocos2dx.CocosProject205-2/lib/arm/libcocos2djs.so (Java_org_cocos2dx_lib_Cocos2dxNativeHelper_nativeExitGame+56)
    2018-12-18 14:04:02.115 31402-31402/? A/DEBUG: #10 pc 00456d4d /data/app/org.cocos2dx.CocosProject205-2/oat/arm/base.odex (offset 0x432000)
    2018-12-18 14:04:02.155 4447-31396/? I/Auth: [SupervisedAccountIntentOperation] This operation is disabled
    2018-12-18 14:04:02.277 31403-31403/? I/art: Starting a blocking GC AddRemoveAppImageSpace
    2018-12-18 14:04:02.330 31157-31401/? W/art: Verification of boolean com.xiaomi.vipbase.utils.AppPermissionUtils.a(android.app.Activity, java.lang.String[], int) took 105.427ms
    2018-12-18 14:04:02.361 1478-1564/? I/art: Starting a blocking GC Explicit
    2018-12-18 14:04:02.425 19047-19053/? I/art: Do partial code cache collection, code=30KB, data=30KB
    2018-12-18 14:04:02.459 30958-30990/? D/ContactsDatabaseHelper: insertMimeType: vnd.android.cursor.item/postal-address_v2
    2018-12-18 14:04:02.462 30958-30990/? D/ContactsDatabaseHelper: insertMimeType: vnd.android.cursor.item/identity
    2018-12-18 14:04:02.465 30958-30990/? D/ContactsDatabaseHelper: insertMimeType: vnd.android.cursor.item/photo
    2018-12-18 14:04:02.490 791-1608/? E/Parcel: Reading a NULL string not supported here.
    2018-12-18 14:04:02.551 31403-31403/? W/System.err: my process name com.lbe.parallel
    2018-12-18 14:04:02.555 19047-19053/? I/art: After code cache collection, code=30KB, data=30KB

  • 重现方式:

  1. 从cocos官网下载Cocos Creator 2.0.5
  2. 从github下载官方demo https://github.com/cocos-creator/tutorial-first-game
  3. Cocos Creator打开官方demo,build个android studio工程
  4. 在AppActivity.java中增加监听安卓物理返回键的代码(不让cocos截取了back的onKeyDown),在C++层加个native方法nativeExitGame,里面加一行
    se::ScriptEngine::getInstance()->destroyInstance();
  5. 从java层调用C++的nativeExitGame
  6. 在Android Studio中debug启动游戏
  7. 在游戏画面,点物理返回键,游戏崩溃,在AndroidStudio中logcat查看报错信息,调用栈
  • 之前哪个版本是正常的 :无

  • 手机型号 华为Nexus 6P / 小米5SP

  • 手机浏览器 :无

  • 编辑器操作系统 :Windows 10 x64

  • 编辑器之前是否有其它报错 :

__dl_read 0x00000000e9fe6858
__dl__ZL24debuggerd_signal_handleriP7siginfoPv 0x00000000e9f9ca9c
InvokeUserSignalHandler 0x00000000aba1ef7a
art::FaultManager::HandleFault(int, siginfo*, void*) 0x00000000e6fda1b2
0x00000000e7fd7188
v8::HandleScope::Initialize(v8::Isolate*) 0x00000000cbae844c
v8::HandleScope::HandleScope(v8::Isolate*) 0x00000000cbae84a0
se::AutoHandleScope::AutoHandleScope() 0x00000000cb4d13a8
se::ScriptEngine::cleanup() 0x00000000cb74ca28
se::ScriptEngine::~ScriptEngine() 0x00000000cb74bdd0
se::ScriptEngine::destroyInstance() 0x00000000cb74bad0
::Java_org_cocos2dx_javascript_SDKWrapper_nativeExitGame(JNIEnv , jobject) main.cpp:76
nativeExitGame 0x00000000dfbcce3e
art_quick_invoke_stub_internal 0x00000000e6f39942
art_quick_invoke_static_stub 0x00000000e7296868
art::ArtMethod::Invoke(art::Thread
, unsigned int*, unsigned int, art::JValue*, char const*) 0x00000000e6f40c02
art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e707bde4
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e7076394
bool art::interpreter::DoInvoke<(art::InvokeType)0, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709ed32
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70937a6
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)4, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709e72e
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70953b0
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)4, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709e72e
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70953b0
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)1, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709df14
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e7094b6e
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)3, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709d3f4
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e7092baa
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)3, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709d3f4
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e7092baa
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)3, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709d3f4
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e7092baa
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)4, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709e72e
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70953b0
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::ArtInterpreterToInterpreterBridge(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e705ed46
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e707637a
bool art::interpreter::DoInvoke<(art::InvokeType)2, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709c8dc
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e70929e8
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::EnterInterpreterFromEntryPoint(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*) 0x00000000e705ecb0
artQuickToInterpreterBridge 0x00000000e7285cc2
art_quick_to_interpreter_bridge 0x00000000e6f3e396
art_quick_invoke_stub_internal 0x00000000e6f39942
art_quick_invoke_stub 0x00000000e7296760
art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*) 0x00000000e6f40bd8
art::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::ArgArray*, art::JValue*, char const*) 0x00000000e71a4660
art::InvokeVirtualOrInterfaceWithVarArgs(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list) 0x00000000e71a5610
art::JNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list) 0x00000000e70f8fb0
art::CheckJNI::CallMethodV(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, std::__va_list, art::Primitive::Type, art::InvokeType) 0x00000000e6f5c92a
art::CheckJNI::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list) 0x00000000e6f5281c
0x00000000e7b3030a
android::NativeInputEventSender::receiveFinishedSignals(_JNIEnv*) 0x00000000e7b4c0ec
android::NativeInputEventSender::handleEvent(int, int, void*) 0x00000000e7b4c186
android::Looper::pollInner(int) 0x00000000e936b196
android::Looper::pollOnce(int, int*, int*, void**) 0x00000000e936ae32
android::NativeMessageQueue::pollOnce(_JNIEnv*, _jobject*, int) 0x00000000e7b577cc
nativePollOnce 0x00000000746468ee
art_quick_invoke_stub_internal 0x00000000e6f39942
art_quick_invoke_stub 0x00000000e7296760
art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*) 0x00000000e6f40bd8
art::interpreter::ArtInterpreterToCompiledCodeBridge(art::Thread*, art::ArtMethod*, art::DexFile::CodeItem const*, art::ShadowFrame*, art::JValue*) 0x00000000e707bde4
bool art::interpreter::DoCall<false, false>(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e7076394
bool art::interpreter::DoInvoke<(art::InvokeType)1, false, false>(art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, art::JValue*) 0x00000000e709df14
art::JValue art::interpreter::ExecuteSwitchImpl<false, false>(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e7094b6e
art::interpreter::Execute(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame&, art::JValue, bool) 0x00000000e705a22c
art::interpreter::EnterInterpreterFromEntryPoint(art::Thread*, art::DexFile::CodeItem const*, art::ShadowFrame*) 0x00000000e705ecb0
artQuickToInterpreterBridge 0x00000000e7285cc2
art_quick_to_interpreter_bridge 0x00000000e6f3e396
loop 0x000000007464356c
main 0x000000007409da18
art_quick_invoke_stub_internal 0x00000000e6f39942
art_quick_invoke_static_stub 0x00000000e7296868
art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*) 0x00000000e6f40c02
art::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::ArgArray*, art::JValue*, char const*) 0x00000000e71a4660
art::InvokeMethod(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jobject*, _jobject*, unsigned int) 0x00000000e71a59f2
art::Method_invoke(_JNIEnv*, _jobject*, _jobject*, _jobject*) 0x00000000e714ca80
invoke 0x00000000719e9fda
run 0x0000000074b3a912
main 0x0000000074b3b7a8
art_quick_invoke_stub_internal 0x00000000e6f39942
art_quick_invoke_static_stub 0x00000000e7296868
art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*) 0x00000000e6f40c02
art::InvokeWithArgArray(art::ScopedObjectAccessAlreadyRunnable const&, art::ArtMethod*, art::ArgArray*, art::JValue*, char const*) 0x00000000e71a4660
art::InvokeWithVarArgs(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list) 0x00000000e71a4472
art::JNI::CallStaticVoidMethodV(_JNIEnv*, _jclass*, _jmethodID*, std::__va_list) 0x00000000e7106af6
0x00000000e7b2c786
android::AndroidRuntime::start(char const*, android::Vectorandroid::String8 const&, bool) 0x00000000e7b2e0ae
0x00000000aba1e952
__libc_init 0x00000000e7fd6d2e
0x00000000aba1e568

能确认是在渲染线程上调用了V8接口吗?如果是必现的,先确认下这个问题。

必现;
不是在nativeRender方法里destroyInstance;
线程不是GL线程,帖子里有截图,Thread-1;
我参考了restart方法的实现,猜测cocos引擎不能随意销毁核心,得在nativeRender中销毁V8脚本引擎,否则会出现异常

顺便问下,restart可以不闪退重启游戏,但是先用end方法,在不kill进程的情况下,再重进游戏,会闪退,只有Kill进程,第二次进才不闪退,
用什么方法,不kill进程,又能确保cocos游戏和引擎释放的彻底,第二次进不会闪退