HarmonyOS 鸿蒙Next XComponent native 侧触发回调时崩溃

HarmonyOS 鸿蒙Next XComponent native 侧触发回调时崩溃 目前一点代码没有,仅有 XComponent 代码,直接崩溃。

ArkTS 侧:

XComponent({
  id: "test1",
  type: XComponentType.SURFACE,
  libraryname: "honey_napi",
})
.width("100%")
.height("100%")

C++ 侧:

void onSurfaceCreatedCB(OH_NativeXComponent *component, void *window) {
    OH_LOG_Print(LOG_APP, LOG_ERROR, 0, "test", "FUCK!: Surface created");
}

EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports) {
    napi_value exportInstance = nullptr;
    if (napi_get_named_property(env, exports, OH_NATIVE_XCOMPONENT_OBJ, &exportInstance) != napi_ok) {
        OH_LOG_Print(LOG_APP, LOG_ERROR, 0, "PluginManager", "Export: napi_get_named_property fail");
    }
    OH_NativeXComponent* nativeXComponent = nullptr;
    if (napi_unwrap(env, exportInstance, reinterpret_cast<void**>(&nativeXComponent)) != napi_ok) {
        OH_LOG_Print(LOG_APP, LOG_ERROR, 0, "PluginManager", "Export: napi_unwrap fail");
        return exports;
    }

    char idStr[OH_XCOMPONENT_ID_LEN_MAX + 1] = {'\0'};
    uint64_t idSize = OH_XCOMPONENT_ID_LEN_MAX + 1;
    if (OH_NativeXComponent_GetXComponentId(nativeXComponent, idStr, &idSize) != OH_NATIVEXCOMPONENT_RESULT_SUCCESS) {
        OH_LOG_Print(LOG_APP, LOG_ERROR, 0, "PluginManager", "Export: OH_NativeXComponent_GetXComponentId fail");
        return exports;
    }
    
    OH_NativeXComponent_Callback callback;
    callback.OnSurfaceCreated = onSurfaceCreatedCB;
    OH_NativeXComponent_RegisterCallback(nativeXComponent, &callback);
    
    return exports;
}
EXTERN_C_END

static napi_module honey_napi_module = {
    .nm_version = 1,
    .nm_flags = 0,
    .nm_filename = nullptr,
    .nm_register_func = Init,
    .nm_modname = "honey_napi",
    .nm_priv = ((void*)0),
    .reserved = { 0 },
};

extern "C" __attribute__((constructor)) void RegisterEntryModule(void) {
    napi_module_register(&honey_napi_module);
}

其中我测试过在 Init 方法中最后一个 return 前插入过输出 log 的代码,有输出内容,说明回调被注册成功了。

同时我在 ArkTS ui 侧做了刚打开应用时不显示 XComponent,点击按钮再显示,显示后崩溃,说明就是在调取回调时出现的问题。

这是触发回调后从显示 XComponent 开始的日志(其中提示找不到 libfwmark_client.z.so 库,我检查了 sdk,sdk 中并没有提供这个库,在互联网上搜索也只能查找到在 分析资源泄露中此章节的示例二 中以示例内容出现过):

INFO      [(100000:100000:scope)] XComponent[test1] triggers onLoad and OnSurfaceCreated callback
INFO      [(native_module_manager.cpp:605)(LoadNativeModule)] key is default/honey_napi
ERROR     Error loading header libfwmark_client.z.so, namespace ndk has no inherits, errno=2
ERROR     Error loading header: can't find library libfwmark_client.z.so in namespace: moduleNs_default
ERROR     dlopen_impl load library header failed for libfwmark_client.z.so
INFO      [(native_module_manager.cpp:297)(Register)] At tail register module name is 'default/honey_napi', isAppModule is 1
INFO      [(100000:100000:scope)] XComponent[test1] native OnSurfaceCreated
ERROR     signal_chain_handler call 2 rd sigchain action for signal: 11 sca_sigaction=5b0c507804 noreturn=0 FREEZE_signo_11 thread_list_lock_status:-1 tl_lock_count=0 tl_lock_waiters=0 tl_lock_tid_fail=-1 tl_lock_count_tid=645 tl_lock_count_fail=-10000 tl_lock_count_tid_sub=645 thread_list_lock_after_lock=55259 thread_list_lock_pre_unlock=55276 thread_list_lock_pthread_exit=55259 thread_list_lock_tid_overlimit=-1 tl_lock_unlock_count=0 __pthread_gettid_np_tl_lock=0 __pthread_exit_tl_lock=0 __pthread_create_tl_lock=0 __pthread_key_delete_tl_lock=0 __synccall_tl_lock=0 __membarrier_tl_lock=0 install_new_tls_tl_lock=0 set_syscall_hooks_tl_lock=0 set_syscall_hooks_linux_tl_lock=0 fork_tl_lock=0 
INFO      DFX_SigchainHandler :: sig(11), pid(55185), tid(55185).
INFO      g_GetStackIdFunc 0000000000000000.
INFO      DFX_SigchainHandler :: sig(11), pid(55185), processName(org.rohy.honey), threadName(org.rohy.honey).
INFO      start wait processdump read registers
INFO      processdump have get all registers .
INFO      start wait processdump unwind
WARN      WriteBinder 209: ioctl_binder returned EINTR time:760775372007164
WARN      SendObituary 529: handle:27 desc:*.IWindowEventChannel 2821739328
ERROR     [] OnRemoteDied(121): ChannelDeathRecipient OnRemoteDied
INFO      [] ~ExtensionSession(134): realease extension session
INFO      [] ~Session(107): id:1299779586
INFO      ThreadHandler 124: proto:0 policy:0 name:OS_IPC_4_55672 invoker:2765884032
INFO      ThreadHandler 124: proto:0 policy:0 name:OS_IPC_5_55673 invoker:2821859968
WARN      WriteBinder 209: ioctl_binder returned EINTR time:760775374875914
WARN      WriteBinder 209: ioctl_binder returned EINTR time:760775377174873
WARN      WriteBinder 209: ioctl_binder returned EINTR time:760775412433206
INFO      processdump unwind finish
INFO      process dump end
INFO      Finish handle signal(11) in 55185:55185
ERROR     signal_chain_handler call usr sigaction for signal: 11 sig_action.sa_sigaction=5b978ea478
ERROR     signal_chain_handler call 2 rd sigchain action for signal: 11 sca_sigaction=5b0c507804 noreturn=0 FREEZE_signo_11 thread_list_lock_status:-1 tl_lock_count=0 tl_lock_waiters=0 tl_lock_tid_fail=-1 tl_lock_count_tid=645 tl_lock_count_fail=-10000 tl_lock_count_tid_sub=645 thread_list_lock_after_lock=55672 thread_list_lock_pre_unlock=55672 thread_list_lock_pthread_exit=55259 thread_list_lock_tid_overlimit=-1 tl_lock_unlock_count=0 __pthread_gettid_np_tl_lock=0 __pthread_exit_tl_lock=0 __pthread_create_tl_lock=0 __pthread_key_delete_tl_lock=0 __synccall_tl_lock=0 __membarrier_tl_lock=0 install_new_tls_tl_lock=0 set_syscall_hooks_tl_lock=0 set_syscall_hooks_linux_tl_lock=0 fork_tl_lock=0 
INFO      DFX_SigchainHandler :: sig(11), pid(55185), tid(55185).
ERROR     signal_chain_handler SIG_DFL handler for signal: 11
ERROR     pid(55185) rethrow sig(11) success.

这是 FaultLog 中错误线程的日志:

Device info:HUAWEI Mate 60 Pro
Build info:ALN-AL00 5.0.0.123(SP19C00E121R4P25)
Fingerprint:455f3d321ccc095daf820ab34c819fdfebe0954e4f8ba5d031964e79805fdde8
Module name:org.rohy.honey
Version:1.0.0
VersionCode:1000000
PreInstalled:No
Foreground:Yes
Timestamp:2025-02-08 16:28:29.298
Pid:42999
Uid:20020276
Process name:org.rohy.honey
Process life time:21s
Reason:Signal:SIGSEGV(SEGV_MAPERR)@0xffffff80ffffffe8 
Fault thread info:
Tid:42999, Name:org.rohy.honey
#00 pc ffffff80ffffffe8 Not mapped
#01 pc 0000000000e0c628 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::XComponentPattern::OnSurfaceCreated()+484)(1d8ede554f62f4eb2bc7fb522193bea8)
#02 pc 0000000002b4cf00 /system/lib64/platformsdk/libace_compatible.z.so(1d8ede554f62f4eb2bc7fb522193bea8)
#03 pc 0000000000a31c84 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::TaskExecutor::PostSyncTask(std::__h::function&lt;void ()&gt;&amp;&amp;, OHOS::Ace::TaskExecutor::TaskType, std::__h::basic_string&lt;char, std::__h::char_traits&lt;char&gt;, std::__h::allocator&lt;char&gt;&gt; const&amp;, OHOS::Ace::PriorityType) const+120)(1d8ede554f62f4eb2bc7fb522193bea8)
#04 pc 0000000000bd4950 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::TaskExecutor::PostSyncTask(std::__h::function&lt;void ()&gt; const&amp;, OHOS::Ace::TaskExecutor::TaskType, std::__h::basic_string&lt;char, std::__h::char_traits&lt;char&gt;, std::__h::allocator&lt;char&gt;&gt; const&amp;) const+108)(1d8ede554f62f4eb2bc7fb522193bea8)
#05 pc 0000000000c2dec0 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::Framework::JsiDeclarativeEngine::FireExternalEvent(std::__h::basic_string&lt;char, std::__h::char_traits&lt;char&gt;, std::__h::allocator&lt;char&gt;&gt; const&amp;, unsigned int, bool)+1072)(1d8ede554f62f4eb2bc7fb522193bea8)
#06 pc 0000000000d2155c /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::XComponentPattern::FireExternalEvent(OHOS::Ace::RefPtr&lt;OHOS::Ace::NG::PipelineContext&gt;, std::__h::basic_string&lt;char, std::__h::char_traits&lt;char&gt;, std::__h::allocator&lt;char&gt;&gt; const&amp;, unsigned int, bool)+220)(1d8ede554f62f4eb2bc7fb522193bea8)
#07 pc 00000000023f34a0 /system/lib64/platformsdk/libace_compatible.z.so(1d8ede554f62f4eb2bc7fb522193bea8)
#08 pc 0000000000bb5234 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::XComponentPattern::XComponentSizeInit()+424)(1d8ede554f62f4eb2bc7fb522193bea8)
#09 pc 0000000000bb45f4 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::XComponentPattern::BeforeSyncGeometryProperties(OHOS::Ace::NG::DirtySwapConfig const&amp;)+512)(1d8ede554f62f4eb2bc7fb522193bea8)
#10 pc 000000000086bf98 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::FrameNode::SyncGeometryNode(bool, OHOS::Ace::NG::DirtySwapConfig const&amp;)+644)(1d8ede554f62f4eb2bc7fb522193bea8)
#11 pc 00000000018af5c4 /system/lib64/platformsdk/libace_compatible.z.so(std::__h::__function::__func&lt;OHOS::Ace::NG::FrameNode::Layout()::$_9, std::__h::allocator&lt;OHOS::Ace::NG::FrameNode::Layout()::$_9&gt;, void ()&gt;::operator()() (.4bf03a507cf0728840f4ffbe7f64413a)+72)(1d8ede554f62f4eb2bc7fb522193bea8)
#12 pc 00000000007cd240 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::UITaskScheduler::FlushLayoutTask(bool)+4716)(1d8ede554f62f4eb2bc7fb522193bea8)
#13 pc 0000000000d112cc /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::UITaskScheduler::FlushTask()+320)(1d8ede554f62f4eb2bc7fb522193bea8)
#14 pc 000000000120fba0 /system/lib64/platformsdk/libace_compatible.z.so(OHOS::Ace::NG::PipelineContext::FlushVsync(unsigned long, unsigned int)+832)(1d8ede554f62f4eb2bc7fb522193bea8)
#15 pc 0000000000d69434 /system/lib64/platformsdk/libace_compatible.z.so(1d8ede554f62f4eb2bc7fb522193bea8)
#16 pc 000000000080c5cc /system/lib64/platformsdk/libace_compatible.z.so(1d8ede554f62f4eb2bc7fb522193bea8)
#17 pc 00000000000e5508 /system/lib64/libwm.z.so(OHOS::Rosen::VsyncStation::VsyncCallbackInner(long, long)+712)(4cae642efb84cf33fa6c1ec096792a54)
#18 pc 00000000000e51a4 /system/lib64/libwm.z.so(4cae642efb84cf33fa6c1ec096792a54)
#19 pc 0000000000024c50 /system/lib64/libvsync.z.so(OHOS::Rosen::VSyncCallBackListener::HandleVsyncCallbacks(long*, long, int)+688)(e6e249e3de38c12a09001fb1c2b2524d)
#20 pc 00000000000247a4 /system/lib64/libvsync.z.so(OHOS::Rosen::VSyncCallBackListener::OnReadable(int)+208)(e6e249e3de38c12a09001fb1c2b2524d)
#21 pc 0000000000020430 /system/lib64/chipset-pub-sdk/libeventhandler.z.so(7624595d16175e81cbcad4bae2f376ca)
#22 pc 000000000001bdb4 /system/lib64/chipset-pub-sdk/libeventhandler.z.so(OHOS::AppExecFwk::EventHandler::DistributeEvent(std::__h::unique_ptr&lt;OHOS::AppExecFwk::InnerEvent, void (*)(OHOS::AppExecFwk::InnerEvent*)&gt; const&amp;)+1140)(7624595d16175e81cbcad4bae2f376ca)
#23 pc 000000000002d690 /system/lib64/chipset-pub-sdk/libeventhandler.z.so(OHOS::AppExecFwk::(anonymous namespace)::EventRunnerImpl::ExecuteEventHandler(std::__h::unique_ptr&lt;OHOS::AppExecFwk::InnerEvent, void (*)(OHOS::AppExecFwk::InnerEvent*)&gt;&amp;)+348)(7624595d16175e81cbcad4bae2f376ca)
#24 pc 000000000002cf4c /system/lib64/chipset-pub-sdk/libeventhandler.z.so(OHOS::AppExecFwk::(anonymous namespace)::EventRunnerImpl::Run()+908)(7624595d16175e81cbcad4bae2f376ca)
#25 pc 00000000000302f0 /system/lib64/chipset-pub-sdk/libeventhandler.z.so(OHOS::AppExecFwk::EventRunner::Run()+528)(7624595d16175e81cbcad4bae2f376ca)
#26 pc 00000000000b60d4 /system/lib64/platformsdk/libappkit_native.z.so(OHOS::AppExecFwk::MainThread::Start()+400)(5a2b27cd4dd27891765ea9c252901f11)
#27 pc 0000000000004e34 /system/lib64/appspawn/appspawn/libappspawn_ace.z.so(RunChildProcessor(AppSpawnContent*, AppSpawnClient*)+568)(d3f6e56ad6a96018b92b82ae93f9f1a7)
#28 pc 000000000000c00c /system/bin/appspawn(AppSpawnChild+576)(95900e357b85f36e3a89104a4041ae3b)
#29 pc 0000000000015ef4 /system/bin/appspawn(ProcessSpawnReqMsg+3180)(95900e357b85f36e3a89104a4041ae3b)
#30 pc 0000000000013b38 /system/bin/appspawn(OnReceiveRequest+132)(95900e357b85f36e3a89104a4041ae3b)
#31 pc 0000000000016dcc /system/lib64/chipset-pub-sdk/libbegetutil.z.so(HandleRecvMsg_+344)(6807ec574aea93e64c71ccb52611b50d)
#32 pc 00000000000168a0 /system/lib64/chipset-pub-sdk/libbegetutil.z.so(HandleStreamEvent_+192)(6807ec574aea93e64c71ccb52611b50d)
#33 pc 0000000000013f80 /system/lib64/chipset-pub-sdk/libbegetutil.z.so(ProcessEvent+88)(6807ec574aea93e64c71ccb52611b50d)
#34 pc 0000000000013b3c /system/lib64/chipset-pub-sdk/libbegetutil.z.so(RunLoop_+308)(6807ec574aea93e64c71ccb52611b50d)
#35 pc 0000000000011958 /system/bin/appspawn(AppSpawnRun+212)(95900e357b85f36e3a89104a4041ae3b)
#36 pc 000000000000f278 /system/bin/appspawn(main+764)(95900e357b85f36e3a89104a4041ae3b)
#37 pc 00000000000a1344 /system/lib/ld-musl-aarch64.so.1(libc_start_main_stage2+64)(e9ff207f4340aee156e36fdd8af0ab22)
Registers:
x0:0000005ba4d48638 x1:0000005ba4daa140 x2:0000005b9cfe2598 x3:0000007e0c310ad9
x4:0000000000000023 x5:0000000000000014 x6:0000000000008080 x7:feff686067666d60
x8:ffffff80ffffffe8 x9:0000005ba4daa140 x10:0000007e0c310ad9 x11:ffffffffc4653600
x12:0000000000000016 x13:0000000082355555 x14:00000000679b81c2 x15:0000000000000000
x16:0000005b9fef61c8 x17:0000005b9d60dfcc x18:ffff000000000006 x19:0000005ba4c65500
x20:0000000000000000 x21:0000007e0c310ad8 x22:0000007e0c310ad9 x23:0000007e0c310ac0
x24:0000005ba4d52b70 x25:0000005ba47ea800 x26:0000000000000000 x27:0000005ba4c65500
x28:0000005ba46d3648 x29:0000007e0c310b00
lr:0000005b9dc4c62c sp:0000007e0c310ab0 pc:ffffff80ffffffe8

更多关于HarmonyOS 鸿蒙Next XComponent native 侧触发回调时崩溃的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
  • 是否添加了 ace 和 hilog?

更多关于HarmonyOS 鸿蒙Next XComponent native 侧触发回调时崩溃的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


经过我在空项目下进行测试,这个问题不是因为 C++ 第三方库添加太多导致的,这里是日志:

INFO      [(100000:100000:scope)] XComponent[test1] triggers onLoad and OnSurfaceCreated callback
INFO      [(native_module_manager.cpp:605)(LoadNativeModule)] key is default/entry
INFO      [(native_module_manager.cpp:297)(Register)] At tail register module name is 'default/entry', isAppModule is 1
INFO      [(100000:100000:scope)] XComponent[test1] native OnSurfaceCreated
ERROR     signal_chain_handler call 2 rd sigchain action for signal: 11 sca_sigaction=5b0c507804 noreturn=0 FREEZE_signo_11 thread_list_lock_status:-1 tl_lock_count=0 tl_lock_waiters=0 tl_lock_tid_fail=-1 tl_lock_count_tid=645 tl_lock_count_fail=-10000 tl_lock_count_tid_sub=645 thread_list_lock_after_lock=7045 thread_list_lock_pre_unlock=7045 thread_list_lock_pthread_exit=7062 thread_list_lock_tid_overlimit=-1 tl_lock_unlock_count=0 __pthread_gettid_np_tl_lock=0 __pthread_exit_tl_lock=0 __pthread_create_tl_lock=0 __pthread_key_delete_tl_lock=0 __synccall_tl_lock=0 __membarrier_tl_lock=0 install_new_tls_tl_lock=0 set_syscall_hooks_tl_lock=0 set_syscall_hooks_linux_tl_lock=0 fork_tl_lock=0 
INFO      DFX_SigchainHandler :: sig(11), pid(6633), tid(6633).
INFO      g_GetStackIdFunc 0000000000000000.
INFO      DFX_SigchainHandler :: sig(11), pid(6633), processName(org.rohy.myapplication), threadName(y.myapplication).
INFO      start wait processdump read registers
INFO      processdump have get all registers .
INFO      start wait processdump unwind
WARN      WriteBinder 209: ioctl_binder returned EINTR time:763070771832335
WARN      WriteBinder 209: ioctl_binder returned EINTR time:763070774077647
WARN      WriteBinder 209: ioctl_binder returned EINTR time:763070775881293
WARN      WriteBinder 209: ioctl_binder returned EINTR time:763070811122439
INFO      processdump unwind finish
INFO      process dump end
INFO      Finish handle signal(11) in 6633:6633
ERROR     signal_chain_handler call usr sigaction for signal: 11 sig_action.sa_sigaction=5b978ea478
ERROR     signal_chain_handler call 2 rd sigchain action for signal: 11 sca_sigaction=5b0c507804 noreturn=0 FREEZE_signo_11 thread_list_lock_status:-1 tl_lock_count=0 tl_lock_waiters=0 tl_lock_tid_fail=-1 tl_lock_count_tid=645 tl_lock_count_fail=-10000 tl_lock_count_tid_sub=645 thread_list_lock_after_lock=7055 thread_list_lock_pre_unlock=7055 thread_list_lock_pthread_exit=7062 thread_list_lock_tid_overlimit=-1 tl_lock_unlock_count=0 __pthread_gettid_np_tl_lock=0 __pthread_exit_tl_lock=0 __pthread_create_tl_lock=0 __pthread_key_delete_tl_lock=0 __synccall_tl_lock=0 __membarrier_tl_lock=0 install_new_tls_tl_lock=0 set_syscall_hooks_tl_lock=0 set_syscall_hooks_linux_tl_lock=0 fork_tl_lock=0 
INFO      DFX_SigchainHandler :: sig(11), pid(6633), tid(6633).
ERROR     signal_chain_handler SIG_DFL handler for signal: 11
ERROR     pid(6633) rethrow sig(11) success.

同时也没有了和 libfwmark_client.z.so 相关的输出,说明 libfwmark_client.z.so 并不是导致问题的原因。

针对帖子标题“HarmonyOS 鸿蒙Next XComponent native 侧触发回调时崩溃”的问题,以下是专业回答:

在HarmonyOS鸿蒙系统中,XComponent作为组件化开发框架,其native侧触发回调时崩溃可能由多种原因引起。首先,需检查回调函数的实现是否存在内存访问越界、空指针引用等常见编程错误。其次,确认回调函数的参数传递是否正确,特别是指针和引用类型的数据,确保在native侧和Java/JS侧的数据类型及内存布局一致。

此外,还需关注多线程环境下的同步问题,确保在触发回调时,相关资源处于可用状态,避免数据竞争或死锁情况。同时,检查XComponent框架的版本兼容性,确保native代码与框架版本相匹配,避免因版本不一致导致的崩溃问题。

若上述检查均无异常,可进一步使用调试工具(如gdb、lldb等)对崩溃现场进行分析,定位具体崩溃原因。通过查看崩溃时的堆栈信息、寄存器状态等,可更精确地找到问题所在。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部