99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙實(shí)戰(zhàn)開發(fā):【FaultLoggerd組件】講解

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-12 16:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

簡(jiǎn)介

Faultloggerd部件是OpenHarmony中C/C++運(yùn)行時(shí)崩潰臨時(shí)日志的生成及管理模塊。面向基于 Rust 開發(fā)的部件,F(xiàn)aultloggerd 提供了Rust Panic故障日志生成能力。系統(tǒng)開發(fā)者可以在預(yù)設(shè)的路徑下找到故障日志,定位相關(guān)問(wèn)題。

架構(gòu)

架構(gòu)

  • Native InnerKits 接口
    • SignalHandler:信號(hào)處理器,接收系統(tǒng)異常信號(hào),觸發(fā)抓取進(jìn)程異常時(shí)的現(xiàn)場(chǎng)信息。
    • BackTrace:本地回棧庫(kù),提供進(jìn)程內(nèi)本地回棧能力。
    • DumpCatcher:堆棧信息抓取工具庫(kù),提供了抓取指定進(jìn)程和線程的堆棧棧信息的能力。
    • FaultloggerdClient:崩潰臨時(shí)日志管理客戶端,接收申請(qǐng)文件描述符、堆棧導(dǎo)出等請(qǐng)求。
  • Rust 接口
    • PanicHandler:Rust PANIC故障處理器,封裝faultloggerd回棧能力支持rust模塊PANIC故障回棧。
    • Rustc Demangle:Rust 符號(hào)demangle庫(kù),支持Rust模塊mangled符號(hào)解析。
  • Faultlogger Daemon 服務(wù)
    • FaultloggerdServer:核心服務(wù)處理模塊,接收并處理客戶端的請(qǐng)求。
    • FaultloggerdSecure:權(quán)限校驗(yàn)?zāi)K,對(duì)運(yùn)行時(shí)崩潰日志生成和抓取提供權(quán)限管理和校驗(yàn)?zāi)芰Α?/li>
    • FaultloggerdConfig:崩潰臨時(shí)日志管理模塊。
    • FaultloggerdPipe:數(shù)據(jù)管道傳輸管理模塊,提供數(shù)據(jù)傳輸管道申請(qǐng)和管理能力。
  • 工具
    • DumpCatcher Command Tool:提供命令行形式的主動(dòng)抓棧工具,僅在Debug版本提供。
    • ProcessDump:進(jìn)程信息抓取二進(jìn)制工具,通過(guò)命令行方式提供抓取指定進(jìn)程、線程堆棧信息的能力。
    • crasher:崩潰構(gòu)造器,提供了崩潰構(gòu)造和模擬能力。
    • Rust Panic Maker:Rust PANIC 故障構(gòu)造器,提供了構(gòu)造Rust模塊的故障構(gòu)造能力。

目前主要支持對(duì)以下C/C++運(yùn)行時(shí)崩潰異常信號(hào)的處理:

信號(hào)值信號(hào)解釋觸發(fā)原因
4SIGILL非法指令執(zhí)行了非法指令,通常是因?yàn)榭蓤?zhí)行文件本身出現(xiàn)錯(cuò)誤,或者試圖執(zhí)行數(shù)據(jù)段,堆棧溢出時(shí)也有可能產(chǎn)生這個(gè)信號(hào)。
5SIGTRAP斷點(diǎn)或陷阱異常由斷點(diǎn)指令或其它trap指令產(chǎn)生。
6SIGABRTabort發(fā)出的信號(hào)調(diào)用abort函數(shù)生成的信號(hào)。
7SIGBUS非法內(nèi)存訪問(wèn)非法地址,包括內(nèi)存地址對(duì)齊(alignment)出錯(cuò)。比如訪問(wèn)一個(gè)四個(gè)字長(zhǎng)的整數(shù),但其地址不是4的倍數(shù)。它與SIGSEGV的區(qū)別在于后者是由于對(duì)合法存儲(chǔ)地址的非法訪問(wèn)觸發(fā)的(如訪問(wèn)不屬于自己存儲(chǔ)空間或只讀存儲(chǔ)空間)。
8SIGFPE浮點(diǎn)異常在發(fā)生致命的算術(shù)運(yùn)算錯(cuò)誤時(shí)發(fā)出,不僅包括浮點(diǎn)運(yùn)算錯(cuò)誤,還包括溢出及除數(shù)為0等其它所有的算術(shù)的錯(cuò)誤。
11SIGSEGV無(wú)效內(nèi)存訪問(wèn)試圖訪問(wèn)未分配給自己的內(nèi)存,或試圖往沒(méi)有寫權(quán)限的內(nèi)存地址寫數(shù)據(jù)。
16SIGSTKFLT棧溢出堆棧溢出。
31SIGSYS系統(tǒng)調(diào)用異常非法的系統(tǒng)調(diào)用。

目錄

faultloggerd/
├── OAT.xml
├── common                                 # 工具庫(kù)和公共定義
├── docs                                   # 文檔
├── example                                # 樣例代碼
├── frameworks                             # 主動(dòng)抓棧實(shí)現(xiàn)
├── interfaces
│   ├── innerkits
│   │   ├── backtrace                      # 本地回棧庫(kù)
│   │   ├── dump_catcher                   # 抓取調(diào)用?;A(chǔ)庫(kù)
│   │   ├── faultloggerd_client            # 崩潰臨時(shí)日志管理服務(wù)客戶端接口
│   │   └── signal_handler                 # 異常信號(hào)處理器
│   └── rust
│       ├── panic_handler                  # Rust Panic 處理器
│       ├── panic_report                   # Rust Panic 故障上報(bào)庫(kù)
│       └── rustc_demangle                 # Rust demangle 庫(kù)
├── services                               # faultloggerd 常駐服務(wù)
├── test
│   ├── funchook                           # hook 工具測(cè)試用例
│   ├── fuzztest                           # 模糊測(cè)試用例
│   ├── moduletest                         # 模塊測(cè)試用例
│   ├── performancetest                    # 性能測(cè)試用例
│   ├── systemtest                         # 系統(tǒng)測(cè)試用例
│   └── unittest                           # 單元測(cè)試用例
└── tools
    ├── crasher_c                          # 崩潰構(gòu)造器(C)
    ├── crasher_cpp                        # 崩潰構(gòu)造器(C++)
    ├── dump_catcher                       # DumpCatcher 命令行工具
    ├── panic_maker                        # Rust Panic 故障構(gòu)造器
    └── process_dump                       # 崩潰抓棧實(shí)現(xiàn)

使用說(shuō)明

進(jìn)程崩潰日志生成

目前已默認(rèn)開啟,進(jìn)程因上述異常信號(hào)崩潰將會(huì)在設(shè)備 /data/log/faultlog/temp 目錄下生成完整的崩潰日志,可基于該崩潰日志進(jìn)行問(wèn)題定位可分析。

DumpCatcher 接口

DumpCatcher是提供給第三方模塊使用的抓取調(diào)用?;A(chǔ)庫(kù),其中包含了打印指定進(jìn)程(或線程)的棧信息的接口函數(shù)。目前支持CPP調(diào)用棧和CPP-JS混合棧。

接口類名:DfxDumpCatcher

接口定義:

  • 默認(rèn):bool DumpCatch(int pid, int tid, std::string& msg);
  • 支持混合棧:bool DumpCatchMix(int pid, int tid, std::string& msg);
  • 支持輸出到指定文件:bool DumpCatchFd(int pid, int tid, std::string& msg, int fd);
  • 支持批量抓棧:bool DumpCatchMultiPid(const std::vector pidV, std::string& msg);

接口參數(shù)說(shuō)明:

  • 接口返回值:
    • true:回棧成功,回棧信息存儲(chǔ)在msg字符串對(duì)象中;
    • false:回棧失敗。
  • 輸入?yún)?shù):
    • pid:希望回棧的進(jìn)程號(hào),如果需要回棧進(jìn)程中的所有線程,則tid設(shè)定為0;
    • tid:希望回棧的線程號(hào);
    • fd:指定寫入回棧信息的文件句柄;
  • 輸出參數(shù):
    • msg:如果回棧成功,則通過(guò)msg輸出回棧后的信息。

注意:此接口需要調(diào)用者是管理員(system,root)用戶,或者只抓取自己用戶擁有的進(jìn)程信息。

樣例代碼:

  • dump_catcher_demo.h
#ifndef DUMP_CATCHER_DEMO_H
#define DUMP_CATCHER_DEMO_H

#include < inttypes.h >

#define NOINLINE __attribute__((noinline))

#define GEN_TEST_FUNCTION(FuncNumA, FuncNumB)          
    __attribute__((noinline)) int TestFunc##FuncNumA() 
    {                                                  
        return TestFunc##FuncNumB();                   
    }

// test functions for callstack depth test
int TestFunc0(void);
int TestFunc1(void);
int TestFunc2(void);
int TestFunc3(void);
int TestFunc4(void);
int TestFunc5(void);
int TestFunc6(void);
int TestFunc7(void);
int TestFunc8(void);
int TestFunc9(void);
int TestFunc10(void);

#endif // DUMP_CATCHER_DEMO_H
  • dump_catcher_demo.cpp
#include "dump_catcher_demo.h"

#include < iostream >
#include < string >
#include < unistd.h >
#include "dfx_dump_catcher.h"
using namespace std;

NOINLINE int TestFunc10(void)
{
    OHOS::HiviewDFX::DfxDumpCatcher dumplog;
    string msg = "";
    bool ret = dumplog.DumpCatch(getpid(), gettid(), msg);
    if (ret) {
        cout < < msg < < endl;
    }
    return 0;
}

// auto gen function
GEN_TEST_FUNCTION(0, 1)
GEN_TEST_FUNCTION(1, 2)
GEN_TEST_FUNCTION(2, 3)
GEN_TEST_FUNCTION(3, 4)
GEN_TEST_FUNCTION(4, 5)
GEN_TEST_FUNCTION(5, 6)
GEN_TEST_FUNCTION(6, 7)
GEN_TEST_FUNCTION(7, 8)
GEN_TEST_FUNCTION(8, 9)
GEN_TEST_FUNCTION(9, 10)

int main(int argc, char *argv[])
{
    TestFunc0();
    return 0;
}
  • BUILD.gn:
import("http://base/hiviewdfx/faultloggerd/faultloggerd.gni")
import("http://build/ohos.gni")

config("dumpcatcherdemo_config") {
  visibility = [ ":*" ]

  include_dirs = [
    ".",
    "http://utils/native/base/include",
    "http://base/hiviewdfx/faultloggerd/interfaces/innerkits/dump_catcher/include/",
  ]
}

ohos_executable("dumpcatcherdemo") {
  sources = [ "dump_catcher_demo.cpp" ]

  configs = [ ":dumpcatcherdemo_config" ]

  deps = [
    "http://base/hiviewdfx/faultloggerd/interfaces/innerkits/dump_catcher:libdfx_dumpcatcher",
    "http://utils/native/base:utils",
  ]

  external_deps = [ "hilog:libhilog" ]

  install_enable = true
  part_name = "faultloggerd"
  subsystem_name = "hiviewdfx"
}
  • 執(zhí)行結(jié)果:
# ./dumpcatcherdemo
#00 pc 0000000000000981(00000000004a8981) /data/test/dumpcatcherdemo
#01 pc 0000000000000a6d(00000000004a8a6d) /data/test/dumpcatcherdemo
#02 pc 0000000000000a63(00000000004a8a63) /data/test/dumpcatcherdemo
#03 pc 0000000000000a59(00000000004a8a59) /data/test/dumpcatcherdemo
#04 pc 0000000000000a4f(00000000004a8a4f) /data/test/dumpcatcherdemo
#05 pc 0000000000000a45(00000000004a8a45) /data/test/dumpcatcherdemo
#06 pc 0000000000000a3b(00000000004a8a3b) /data/test/dumpcatcherdemo
#07 pc 0000000000000a31(00000000004a8a31) /data/test/dumpcatcherdemo
#08 pc 0000000000000a27(00000000004a8a27) /data/test/dumpcatcherdemo
#09 pc 0000000000000a1d(00000000004a8a1d) /data/test/dumpcatcherdemo
#10 pc 0000000000000a13(00000000004a8a13) /data/test/dumpcatcherdemo
#11 pc 0000000000000a77(00000000004a8a77) /data/test/dumpcatcherdemo
#12 pc 00000000000c2b08(00000000b6fafb08) /system/lib/ld-musl-arm.so.1(__libc_start_main+116)
#13 pc 0000000000000938(00000000004a8938) /data/test/dumpcatcherdemo
#14 pc 00000000000008c4(00000000004a88c4) /data/test/dumpcatcherdemo

DumpCatcher 命令行工具

DumpCatcher 是指提供給用戶的一個(gè)抓取調(diào)用棧命令行工具,由 DumpCatcher innerkits 接口封裝實(shí)現(xiàn),該工具通過(guò) -p、-t 參數(shù)指定進(jìn)程和線程,以及 [-c -m -k] 可選參數(shù)指定抓棧的類型,命令執(zhí)行后在命令行窗口打印指定的進(jìn)程的線程棧信息。

工具名稱:dumpcatcher

位置:/system/bin

參數(shù)說(shuō)明:

  • -p [pid]:打印指定進(jìn)程下面的所有線程棧信息;
  • -p [pid] -t [tid]:打印指定進(jìn)程下面的指定線程信息。
  • [-c -m -k]:可選參數(shù), 指定打印 -c(pp)C++調(diào)用棧、-m(ix)C++ JS混合調(diào)用棧、-k(ernel)調(diào)用棧類型。

返回打印說(shuō)明:如果棧信息解析成功,則將信息顯示到標(biāo)準(zhǔn)輸出。

注意:使用此接口需要調(diào)用者是管理員(system,root)用戶。

Rust Panic 故障處理器

TODO

處理流程

進(jìn)程崩潰抓棧處理流程

進(jìn)程崩潰抓棧處理流程

  1. 進(jìn)程運(yùn)行時(shí)異常崩潰后會(huì)收到來(lái)自 Kernel 發(fā)送的崩潰信號(hào),由進(jìn)程在啟動(dòng)加載的 SignalHandler 模塊進(jìn)行信號(hào)處理;
  2. 進(jìn)程接收到崩潰信號(hào)后,保存當(dāng)前進(jìn)程上下文,fork 出子進(jìn)程執(zhí)行 ProcessDump 二進(jìn)制進(jìn)行抓棧;
  3. ProcessDumpFaultloggerd 申請(qǐng)文件句柄用于存儲(chǔ)收集到的崩潰日志數(shù)據(jù);
  4. ProcesDump 將完整崩潰日志數(shù)據(jù)寫入到 /data/log/faultlog/temp 目錄下進(jìn)行臨時(shí)存儲(chǔ);
  5. ProcessDump 收集完崩潰日志后,上報(bào)給 Hiview 進(jìn)行后續(xù)處理;
  6. Hiview 接收到新增進(jìn)程崩潰故障數(shù)據(jù)后,提取簡(jiǎn)易的崩潰日志存儲(chǔ)到 /data/log/faultlog/faultlogger 目錄下,并生成 HiSysevent 故障事件。

DumpCatcher 接口/命令行工具 主動(dòng)抓棧處理流程

DumpCatcher主動(dòng)抓棧處理流程圖

  1. 進(jìn)程A調(diào)用DumpCatcher庫(kù)提供的系列接口(1B),或通過(guò) DumpCatcher 命令行工具(1A),申請(qǐng)dump指定進(jìn)程和線程的堆棧信息;
  2. 如果目前進(jìn)程是當(dāng)前進(jìn)程,則直接調(diào)用 BackTrace Local 提供的能力進(jìn)行本地回棧輸出(2B);如果不是,則向 Faultloggerd 服務(wù)發(fā)送抓棧請(qǐng)求(2A);
  3. Faultloggerd 接收到抓棧請(qǐng)求,鑒通過(guò)權(quán)和管道申請(qǐng)等操作后,向目標(biāo)進(jìn)程發(fā)送 SIGDUMP(35) 信號(hào)觸發(fā)主動(dòng)抓棧(3);
  4. 目前進(jìn)程接收到 SIGDUMP(35) 抓棧信號(hào)后,保存當(dāng)前進(jìn)程上下文,fork出子進(jìn)程執(zhí)行 ProcessDump 二進(jìn)制進(jìn)行抓棧,通過(guò) Faultloggerd 申請(qǐng)到的管道返回調(diào)用棧數(shù)據(jù)(4)。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 程序員
    +關(guān)注

    關(guān)注

    4

    文章

    954

    瀏覽量

    30435
  • 鴻蒙系統(tǒng)
    +關(guān)注

    關(guān)注

    183

    文章

    2642

    瀏覽量

    68154
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2126

    瀏覽量

    33154
  • OpenHarmony
    +關(guān)注

    關(guān)注

    29

    文章

    3856

    瀏覽量

    18656
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    鴻蒙基礎(chǔ)開發(fā)實(shí)戰(zhàn)-(ArkTS)像素轉(zhuǎn)換

    的使用。通過(guò)像素轉(zhuǎn)換案例,向開發(fā)講解了如何使用像素單位設(shè)置組件的尺寸、字體的大小以及不同像素單位之間的轉(zhuǎn)換方法。更多鴻蒙4.0的學(xué)習(xí),可以前往主頁(yè)學(xué)習(xí)或前往《
    發(fā)表于 01-11 16:53

    鴻蒙開發(fā)基礎(chǔ)-Web組件之cookie操作

    }) ... } ... 本文章主要是對(duì)鴻蒙開發(fā)當(dāng)中ArkTS語(yǔ)言的基礎(chǔ)應(yīng)用實(shí)戰(zhàn),Web組件里的cookie操作。更多的鴻蒙應(yīng)用
    發(fā)表于 01-14 21:31

    鴻蒙開發(fā)OpenHarmony組件復(fù)用案例

    ) } }, item => item) } } } 本文主要是對(duì)鴻蒙開發(fā)基礎(chǔ)當(dāng)中的OpenHarmony技術(shù)組件復(fù)用示例, 更多鴻蒙開發(fā)
    發(fā)表于 01-15 17:37

    鴻蒙實(shí)戰(zhàn)項(xiàng)目開發(fā):【短信服務(wù)】

    、OpenHarmony 多媒體技術(shù)、Napi組件、OpenHarmony內(nèi)核、Harmony南向開發(fā)、鴻蒙項(xiàng)目實(shí)戰(zhàn)等等)鴻蒙(Harmon
    發(fā)表于 03-03 21:29

    鴻蒙Flutter實(shí)戰(zhàn):07混合開發(fā)

    # 鴻蒙Flutter實(shí)戰(zhàn):混合開發(fā) 鴻蒙Flutter混合開發(fā)主要有兩種形式。 ## 1.基于har 將flutter module
    發(fā)表于 10-23 16:00

    鴻蒙5開發(fā)寶藏案例分享---Swiper組件性能優(yōu)化實(shí)戰(zhàn)

    鴻蒙寶藏:Swiper組件性能優(yōu)化實(shí)戰(zhàn),告別卡頓丟幀! 大家好!最近在鴻蒙開發(fā)時(shí),偶然發(fā)現(xiàn)了官方文檔里埋藏的 性能優(yōu)化寶藏案例 ,尤其是&l
    發(fā)表于 06-12 17:53

    微信小程序如何開發(fā)?微信小程序教程視頻常用組件API開發(fā)項(xiàng)目實(shí)戰(zhàn)

    本文檔的主要內(nèi)容介紹的是微信小程序如何開發(fā)?微信小程序教程視頻微信小程序入門與實(shí)戰(zhàn) 常用組件API開發(fā)技巧項(xiàng)目實(shí)戰(zhàn)詳細(xì)的介紹了
    發(fā)表于 08-28 14:41 ?88次下載

    鴻蒙官方開發(fā)板功能講解介紹

    鴻蒙官方開發(fā)板功能講解,不同設(shè)備的硬件和軟件差異比較。
    的頭像 發(fā)表于 12-01 17:58 ?4696次閱讀

    鴻蒙ArkUI開發(fā)-Tabs組件的使用

    鴻蒙ArkUI開發(fā)-Tabs組件的使用
    的頭像 發(fā)表于 01-19 16:01 ?2750次閱讀
    <b class='flag-5'>鴻蒙</b>ArkUI<b class='flag-5'>開發(fā)</b>-Tabs<b class='flag-5'>組件</b>的使用

    鴻蒙開發(fā)【設(shè)備開發(fā)基礎(chǔ)知識(shí)】

    鴻蒙開發(fā)基礎(chǔ)知識(shí)講解
    的頭像 發(fā)表于 01-29 18:44 ?1504次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b>【設(shè)備<b class='flag-5'>開發(fā)</b>基礎(chǔ)知識(shí)】

    鴻蒙實(shí)戰(zhàn)開發(fā)Camera組件:【相機(jī)】

    相機(jī)組件支持相機(jī)業(yè)務(wù)的開發(fā),開發(fā)者可以通過(guò)已開放的接口實(shí)現(xiàn)相機(jī)硬件的訪問(wèn)、操作和新功能開發(fā),最常見的操作如:預(yù)覽、拍照和錄像等。
    的頭像 發(fā)表于 03-08 16:20 ?1080次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>開發(fā)</b>Camera<b class='flag-5'>組件</b>:【相機(jī)】

    鴻蒙開發(fā)實(shí)戰(zhàn):【性能調(diào)優(yōu)組件

    性能調(diào)優(yōu)組件包含系統(tǒng)和應(yīng)用調(diào)優(yōu)框架,旨在為開發(fā)者提供一套性能調(diào)優(yōu)平臺(tái),可以用來(lái)分析內(nèi)存、性能等問(wèn)題
    的頭像 發(fā)表于 03-13 15:12 ?863次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>實(shí)戰(zhàn)</b>:【性能調(diào)優(yōu)<b class='flag-5'>組件</b>】

    鴻蒙實(shí)戰(zhàn)開發(fā)學(xué)習(xí)【FaultLoggerd組件

    Faultloggerd部件是OpenHarmony中C/C++運(yùn)行時(shí)崩潰臨時(shí)日志的生成及管理模塊。面向基于 Rust 開發(fā)的部件,Faultloggerd 提供了Rust Panic故障日志生成能力。系統(tǒng)
    的頭像 發(fā)表于 03-17 20:39 ?938次閱讀
    <b class='flag-5'>鴻蒙</b><b class='flag-5'>實(shí)戰(zhàn)</b><b class='flag-5'>開發(fā)</b>學(xué)習(xí)【<b class='flag-5'>FaultLoggerd</b><b class='flag-5'>組件</b>】

    HarmonyOS實(shí)戰(zhàn)組件化項(xiàng)目搭建

    前言 鴻蒙應(yīng)用開發(fā)已經(jīng)成為互聯(lián)網(wǎng)新的風(fēng)口,開發(fā)鴻蒙軟件已經(jīng)成為今年工作的核心目標(biāo)。在軟件開發(fā)過(guò)程中,對(duì)于復(fù)雜度較大,功能較多的軟件都會(huì)采用
    的頭像 發(fā)表于 06-09 14:58 ?225次閱讀
    HarmonyOS<b class='flag-5'>實(shí)戰(zhàn)</b>:<b class='flag-5'>組件</b>化項(xiàng)目搭建

    【HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐

    【HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 07-11 18:20 ?293次閱讀
    【HarmonyOS 5】金融應(yīng)用<b class='flag-5'>開發(fā)</b><b class='flag-5'>鴻蒙</b><b class='flag-5'>組件</b>實(shí)踐