Page 1 of 1

🚀🚀 Matter初始化闪退问题

Posted: 2024年 Dec 11日 20:43
by hackill

基本信息:

  • SDK 使用5.16.1 版本

问题描述:

使用matter 需要在有matter设备的家庭中进行初始化,偶尔会到一些 so库的闪退问题,解决起来颇为头疼,最终遇到的情况和解决的办法如下。

matter的初始化的代码如下

Code: Select all

IThingMatterFabricManager fabricManager = ThingHomeSdk.getFabricManager();
fabricManager.initFabric(getContext(), spaceId, new IThingDataCallback<OpenFabricInfo>() {
     @Override
     public void onSuccess(OpenFabricInfo result) {

}

@Override
public void onError(String errorCode, String errorMessage) {

}
});

情况1:初始化闪退情况1

闪退信息为

Code: Select all

DEBUG   :     x0  b400007b5e8054f0  x1  0000000000000019  x2  0000007979bdc280  x3  0000007979bdbfea
DEBUG   :     x4  b400007c9e721b41  x5  0000007979bdbf91  x6  0000007979bdb0ec  x7  0000007979bdb0ec
DEBUG   :     x8  0000007979bdc290  x9  0000000000000000  x10 00000000000001a8  x11 0000000000000000
DEBUG   :     x12 00000000ffffffee  x13 0000000000000031  x14 0000000000000000  x15 000000003fffffff
DEBUG   :     x16 0000007968093eb0  x17 0000007968012724  x18 0000007978dec000  x19 0000007979bde948
DEBUG   :     x20 b400007b0e693c50  x21 0000007d56fc1709  x22 0000007979bde378  x23 0000007979bde990
DEBUG   :     x24 00000079edffbd90  x25 0000000000000002  x26 00000079edffbb30  x27 0000000000000002
DEBUG   :     x28 0000007979bde860  x29 0000007979bdc000
DEBUG   :     lr  000000796800f0b8  sp  0000007979bdbfc0  pc  000000796800f0f0  pst 0000000080001000
DEBUG   : 59 total frames
DEBUG   : backtrace:
DEBUG   :       #00 pc 00000000019e00f0  /data/app/~~HHrcjh2jVUh61LR3nTQLQw==/com.ledvance.smartunify-l7sMbNtOVuGtX-wKAsMs8w==/base.apk (offset 0x9540000) (chip::FabricTable::AddNewPendingTrustedRootCert(chip::Span<unsigned char const> const&)+340)
DEBUG   :       #01 pc 00000000018c685c  /data/app/~~HHrcjh2jVUh61LR3nTQLQw==/com.ledvance.smartunify-l7sMbNtOVuGtX-wKAsMs8w==/base.apk (offset 0x9540000) (chip::Controller::DeviceController::InitControllerNOCChain(chip::Controller::ControllerInitParams const&)+1204)
DEBUG   :       #02 pc 00000000018c601c  /data/app/~~HHrcjh2jVUh61LR3nTQLQw==/com.ledvance.smartunify-l7sMbNtOVuGtX-wKAsMs8w==/base.apk (offset 0x9540000) (chip::Controller::DeviceController::Init(chip::Controller::ControllerInitParams)+524)
DEBUG   :       #03 pc 00000000018c8484  /data/app/~~HHrcjh2jVUh61LR3nTQLQw==/com.ledvance.smartunify-l7sMbNtOVuGtX-wKAsMs8w==/base.apk (offset 0x9540000) (chip::Controller::DeviceCommissioner::Init(chip::Controller::CommissionerInitParams)+64)
DEBUG   :       #04 pc 00000000018e1b80  /data/app/~~HHrcjh2jVUh61LR3nTQLQw==/com.ledvance.smartunify-l7sMbNtOVuGtX-wKAsMs8w==/base.apk (offset 0x9540000)
DEBUG   :       #05 pc 000000000090b090  /data/app/~~HHrcjh2jVUh61LR3nTQLQw==/com.ledvance.smartunify-l7sMbNtOVuGtX-wKAsMs8w==/base.apk (offset 0x9540000)
DEBUG   :       #06 pc 0000000000917680  /data/app/~~HHrcjh2jVUh61LR3nTQLQw==/com.ledvance.smartunify-l7sMbNtOVuGtX-wKAsMs8w==/base.apk (offset 0x9540000) (Java_chip_devicecontroller_ChipDeviceController_newDeviceController+2244)
DEBUG   :       #07 pc 0000000000384370  /apex/com.android.art/lib64/libart.so (art_quick_generic_jni_trampoline+144) (BuildId: 3f7d5a016e08d528f129bdd336d81168)

这里的闪退原因 初始化initFabric 重复的init了,在initfabrci初始化的时候,是一个异步的行为,需要等待initFabric 完成后 才能进行 下一个initfabric

初始化闪退情况2

Code: Select all

19444 19773 E Thing   : thing_matter  _ChipDeviceControllerManager Create main device controller exceptionchip.devicecontroller.ChipDeviceControllerException: src/credentials/FabricTable.cpp:795: CHIP Error 0x0000000B: No memory
19444 19773 W Thing   : thing_matter MatterService getMainDeviceController
19444 19773 I Thing   : thing_matter  _ChipDeviceControllerManager Create main controller fabricId is: 13673184 ,nodeId is: 65536
19444 19773 D thing-matter: TS: Reverted Last Known Good Time to previous value
19444 19773 E Thing   : thing_matter  _ChipDeviceControllerManager Create main device controller exceptionchip.devicecontroller.ChipDeviceControllerException: src/credentials/FabricTable.cpp:795: CHIP Error 0x0000000B: No memory
19444 19773 W Thing   : thing_matter MatterService getMainDeviceController
19444 19773 I Thing   : thing_matter  _ChipDeviceControllerManager Create main controller fabricId is: 13673184 ,nodeId is: 65536
19444 19773 E Thing   : thing_matter  _ChipDeviceControllerManager Create main device controller exceptionchip.devicecontroller.ChipDeviceControllerException: src/credentials/FabricTable.cpp:795: CHIP Error 0x0000000B: No memory
19444 19773 W Thing   : thing_matter MatterService getMainDeviceController
19444 19773 I Thing   : thing_matter  _ChipDeviceControllerManager Create main controller fabricId is: 13673184 ,nodeId is: 65536
19444 19773 E Thing   : thing_matter  _ChipDeviceControllerManager Create main device controller exceptionchip.devicecontroller.ChipDeviceControllerException: src/credentials/FabricTable.cpp:795: CHIP Error 0x0000000B: No memory
19444 19773 W Thing   : thing_matter MatterService getMainDeviceController
19444 19773 I Thing   : thing_matter  _ChipDeviceControllerManager Create main controller fabricId is: 13673184 ,nodeId is: 65536

表现的情况为 有常规初始化,却闪退,通过日志分析,在初始化的时候 有报错 src/credentials/FabricTable.cpp:795: CHIP Error 0x0000000B: No memory。针对这情况,分析matter源码找到原因,因为内部限制了 fabric初始化,最多只能为17,所以进行初始化 initfabric 的时候 也需要考虑数量问题。避免越界导致的无法创建,进而引起后续的崩溃