解决从零学习RN for OpenHarmony踩坑日记(四)https://blog.csdn.net/gaojw07/article/details/157297952?spm=1011.2415.3001.5331中的问题后,又出现了其他问题,在此进行记录。

        问题1:

        问题描述:

        编译过程中出现cmakelist的错误,具体说明如下:

project(rnapp)
cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_SKIP_BUILD_RPATH TRUE)
set(OH_MODULE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules")
set(RNOH_APP_DIR "${CMAKE_CURRENT_SOURCE_DIR}")

set(RNOH_CPP_DIR "${OH_MODULE_DIR}/@rnoh/react-native-openharmony/src/main/cpp")
set(RNOH_GENERATED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/generated")
set(CMAKE_ASM_FLAGS "-Wno-error=unused-command-line-argument -Qunused-arguments")
set(CMAKE_CXX_FLAGS "-fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -s -fPIE -pie")
add_compile_definitions(WITH_HITRACE_SYSTRACE)
set(WITH_HITRACE_SYSTRACE 1) # for other CMakeLists.txt files to use

add_subdirectory("${RNOH_CPP_DIR}" ./rn)

add_library(rnoh_app SHARED
    "./PackageProvider.cpp"
    "${RNOH_CPP_DIR}/RNOHAppNapiBridge.cpp"
)

target_link_libraries(rnoh_app PUBLIC rnoh)

        问题原因:

        cmakelist.txt中的第四行里设置的oh_modules路径不对,set(OH_MODULE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules"),oh_modules不在这一层,需要再加一层。

        解决方案:

        路径多加一层:set(OH_MODULE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules")改为set(OH_MODULE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../oh_modules")

        问题2:

        问题描述:

        项目运行时报错,错误如下:        

        Reason:TypeError
        Error name:TypeError
        Error message:Cannot read property logger of undefined
        Stacktrace:
            at aboutToAppear entry (entry/src/main/ets/pages/Index.ets:28:41)

        问题原因:

        rnohCoreContext 通过 @StorageLink 装饰器与 AppStorage 绑定,其初始值为 undefined

aboutToAppear 生命周期早于 build 执行,此时 StorageLink 可能未完成数据同步,导致 this.rnohCoreContext 仍为 undefined

代码中直接使用 this.rnohCoreContext!.logger(非空断言操作符 !),强制访问未初始化的对象属性。

        解决方案:

        在访问 this.rnohCoreContext 前添加空值校验:

aboutToAppear() {
  if (this.rnohCoreContext) { // 增加空校验
    this.logger = this.rnohCoreContext.logger.clone("Index");
    const stopTracing = this.logger.clone("aboutToAppear").startTracing();
    this.shouldShow = true;
    stopTracing();
  }
}

        解决以上问题后,项目运行成功。

        由于目前没有添加任何内容,所以是白屏,接下来会逐渐进行丰富。

        欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐