基于 HarmonyOS 的 HTTPS 请求过程开发示例(ArkTS)

鸿蒙HarmonyOS实战案例:HTTPS证书自选CA校验示例 包括了HttpRequestOptions类型的options,可以指定发起请求的参数,其中就包括caPath,如果设置了caPath,系统将使用用户指定路径的CA证书,而不是系统的CA证书,这就给我们提供了一个方法,使用自签名证书的CA证书来验证服务端证书,从而达到正常发起HTTPS请求的目的。 阅读详情

介绍

本篇 Codelab 基于网络模块以及 Webview 实现一次 HTTPS 请求,并对其过程进行抓包分析。效果如图所示:

相关概念

● Webview:提供 Web 控制能力,Web 组件提供网页显示能力。

● HTTP数据请求:网络管理模块,提供 HTTP 数据请求能力,支持 GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT 请求方法。

● HTTPS:应用层协议,支持加密传输以及身份认证,保证数据的安全传输。

● SSL:SSL(Secure Socket Layer)安全套接层是位于传输通信协议(TCP/IP)之上实现的一种安全协议。

● TLS:TLS(Transport Layer Security)是一种安全协议,旨在实现数据加密传输。

完整示例

gitee源码地址

源码下载

HTTPS请求过程(ArkTS).zip

环境搭建

我们首先需要完成 HarmonyOS 开发环境搭建,可参照如下步骤进行。

软件要求

● DevEco Studio版本:DevEco Studio 3.1 Release。 

● HarmonyOS SDK版本:API version 9。

硬件要求

● 设备类型:华为手机或运行在 DevEco Studio 上的华为手机设备模拟器。

● HarmonyOS 系统:3.1.0 Developer Release。

环境搭建

1.  安装 DevEco Studio,详情请参考下载和安装软件。

2.  设置 DevEco Studio 开发环境,DevEco Studio 开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用,可以根据如下两种情况来配置开发环境:

● 如果可以直接访问 Internet,只需进行下载HarmonyOS SDK操作。

● 如果网络不能直接访问 Internet,需要通过代理服务器才可以访问,请参考配置开发环境。

3.  开发者可以参考以下链接,完成设备调试的相关配置:

● 使用真机进行调试

● 使用模拟器进行调试

代码结构解读

本篇 Codelab 只对核心代码进行讲解,对于完整代码,我们会在源码下载或 gitee 中提供。

├──entry/src/main/ets                // 代码区│  ├──common│  │  ├──constants│  │  │  ├──StyleConstants.ets       // 样式常量类 │  │  │  └──CommonConstants.ets      // 常量类│  │  └──utils│  │     ├──HttpUtil.ets             // 网络请求方法│  │     └──Logger.ets               // 日志打印工具类│  ├──entryability│  │  └──EntryAbility.ts             // 程序入口类│  └──pages│     └──WebPage.ets                 // 页面入口└──entry/src/main/resources          // 资源文件目录

创建 HTTPS 请求

HTTPS 协议是位于应用层的一种安全传输协议,与 HTTP 最大的区别是服务端与客户端之间进行数据传输都会经过 TLS/SSL 加密。该示例请求HarmonyOS官网,并将请求得到的内容通过 Web 容器展示出来。效果如图所示:

首先在 HttpUtil.ets 中调用 createHttp 方法创建一个请求任务,再通过 request 方法发起网络请求。该方法支持三个参数:url、options 以及 callback 回调,其中 options 可以设置请求方法、请求头以及超时时间等。

// HttpUtil.etsimport http from '@ohos.net.http';export default async function httpGet(url: string) {  if (!url) {    return undefined;  }  let request = http.createHttp();  let options = {    method: http.RequestMethod.GET,    header: { 'Content-Type': 'application/json' },    readTimeout: CommonConstant.READ_TIMEOUT,    connectTimeout: CommonConstant.CONNECT_TIMEOUT  } as http.HttpRequestOptions;  let result = await request.request(url, options);  return result;}

接着在入口页面中调用上述封装的 httpGet 方法请求指定网址,将请求得到的内容嵌入到 Web 组件中。

// WebPage.etsimport http from '@ohos.net.http';...@Entry@Componentstruct WebPage {  @State webVisibility: Visibility = Visibility.Hidden;  ...  build() {    Column() {      ...    }  }
  async onRequest() {    if (this.webVisibility === Visibility.Hidden) {      this.webVisibility = Visibility.Visible;      try {        let result = await httpGet(this.webSrc);        if (result && result.responseCode === http.ResponseCode.OK) {          this.controller.clearHistory();          this.controller.loadUrl(this.webSrc);        }       } catch (error) {        promptAction.showToast({          message: $r('app.string.http_response_error')        })      }    } else {      this.webVisibility = Visibility.Hidden;    }  }}

分析模块源码可知,通过 request 方法建立请求后,模块底层首先会调用三方库libcurl中的 curl_easy_init 初始化一个简单会话。初始化完成后,接着调用 curl_easy_setopt 方法设置传输选项。其中 CURLOPT_URL 用于设置请求的 URL 地址,对应 request 中的 url 参数;CURLOPT_WRITEFUNCTION 可以设置一个回调,保存接收的数据;CURLOPT_HEADERDATA 支持设置回调,在回调中保存响应头数据。

// http_exec.cpp
bool HttpExec::RequestWithoutCache(RequestContext *context)
{
    if (!staticVariable_.initialized) {
        NETSTACK_LOGE("curl not init");
        return false;
    }
    auto handle = curl_easy_init();
    ...
    if (!SetOption(handle, context, context->GetCurlHeaderList())) {
        NETSTACK_LOGE("set option failed");
        return false;
    }
    ...
    return true;
}
...
bool HttpExec::SetOption(CURL *curl, RequestContext *context, struct curl_slist *requestHeader)
{
    const std::string &method = context->options.GetMethod();
    if (!MethodForGet(method) && !MethodForPost(method)) {
        NETSTACK_LOGE("method %{public}s not supported", method.c_str());
        return false;
    }
    if (context->options.GetMethod() == HttpConstant::HTTP_METHOD_HEAD) {
        NETSTACK_CURL_EASY_SET_OPTION(curl, CURLOPT_NOBODY, 1L, context);
    }
    // 设置请求URL
    NETSTACK_CURL_EASY_SET_OPTION(curl, CURLOPT_URL, context->options.GetUrl().c_str(), context);
    ...
    // 设置CURLOPT_WRITEFUNCTION传输选项,OnWritingMemoryBody为回调函数
    NETSTACK_CURL_EASY_SET_OPTION(curl, CURLOPT_WRITEFUNCTION, OnWritingMemoryBody, context);
    NETSTACK_CURL_EASY_SET_OPTION(curl, CURLOPT_WRITEDATA, context, context);
    // 在OnWritingMemoryHeader写入响应头数据
    NETSTACK_CURL_EASY_SET_OPTION(curl, CURLOPT_HEADERFUNCTION, OnWritingMemoryHeader, context);
    NETSTACK_CURL_EASY_SET_OPTION(curl, CURLOPT_HEADERDATA, context, context);
    ...
    return true;
}
...
#define NETSTACK_CURL_EASY_SET_OPTION(handle, opt, data, asyncContext)                                   \
    do {            
        CURLcode result = curl_easy_setopt(handle, opt, data);                                           \
        if (result != CURLE_OK) {                                                                        \
            const char *err = curl_easy_strerror(result);                                                \
            NETSTACK_LOGE("Failed to set option: %{public}s, %{public}s %{public}d", #opt, err, result); \
            (asyncContext)->SetErrorCode(result);                                                        \
            return false;                                                                                \
        }                                                                                                \

传输选项设置成功后,调用 curl_multi_perform 执行传输请求,并通过 curl_multi_info_read 查询处理句柄是否有消息返回,最后进入 HandleCurlData 方法处理返回数据。

// http_exec.cppvoid HttpExec::SendRequest(){    ...    do {        ...        auto ret = curl_multi_perform(staticVariable_.curlMulti, &runningHandle);        ...    } while (runningHandle > 0);}...void HttpExec::ReadResponse(){    CURLMsg *msg = nullptr; /* NOLINT */    do {        ...        msg = curl_multi_info_read(staticVariable_.curlMulti, &leftMsg);        if (msg) {            if (msg->msg == CURLMSG_DONE) {                HandleCurlData(msg);            }        }    } while (msg);}

在 HandleCurlData 函数中调用 ParseHeaders 函数将上面回调写入的响应头解析出来,其中响应头中会携带客户端和服务端支持的最高网络协议,如果是 HTTP/2 表示支持 HTTPS 加密传输。

// http_exec.cpp
bool HttpExec::GetCurlDataFromHandle(CURL *handle, RequestContext *context, CURLMSG curlMsg, CURLcode result)
{
    ...
    context->response.ParseHeaders();
    return true;
}
// http_response.cpp
void HttpResponse::ParseHeaders()
{
    std::vector<std::string> vec = CommonUtils::Split(rawHeader_, HttpConstant::HTTP_LINE_SEPARATOR);
    for (const auto &header : vec) {
        if (CommonUtils::Strip(header).empty()) {
            continue;
        }
        auto index = header.find(HttpConstant::HTTP_HEADER_SEPARATOR);
        if (index == std::string::npos) {
            header_[CommonUtils::Strip(header)] = "";
            NETSTACK_LOGI("HEAD: %{public}s", CommonUtils::Strip(header).c_str());
            continue;
        }
        header_[CommonUtils::ToLower(CommonUtils::Strip(header.substr(0, index)))] =
            CommonUtils::Strip(header.substr(index + 1));
    }
}

将本篇 Codelab 中的网址协议头更改为 http 时,在 DevEco Studio 的日志中看到服务端会返回 301 状态码永久重定向到 https,因此最终通信依旧会经历 TLS 加密传输。

模块源码可以在 Gitee 开源仓库 communication_netstack 中获取,本篇 Codelab 引用源码部分位于 http_exec 文件中。

TLS/SSL 握手过程

本章节主要通过抓包数据分析 TLS 协议的握手过程,其中包括交换参数、证书验证、密钥计算以及验证密钥等,抓包内容如图所示:

握手过程如图所示:

5.1 第一次握手

根据上图中可以看到,客户端首先会进行第一次握手连接,发送“Client Hello”消息给服务端开启一个新的会话连接。分析数据包得到,客户端在第一次握手时会向服务端传递协议版本号(TLS1.2)、随机数(Client Random,用于后续生成“会话密钥”)、Session ID 以及 Cipher Suites(客户端支持的密码套件)。数据内容如图所示:

5.2 第二次握手

服务端接收到客户端数据后,将响应数据通过“Sever Hello”传递给客户端,包括随机数(Sever Random,用于后续生成“会话密钥”)、协议版本号(TLS1.2)以及 Cipher Suite(任意选择一个客户端支持的密码套件),数据内容如图所示:

服务端传递“Sever Hello”后,紧跟着会将 Certificate(证书)、“Sever Key Exchange”消息以及“Server Hello Done”消息传递给客户端。此处着重分析“Sever Key Exchange”,数据内容如图所示:

5.3 第三次握手

客户端收到“Server Hello Done”消息后,会将 Client Params 数据传递给服务端,其中包含自身生成的椭圆曲线公钥(Pubkey),数据内容如图所示:

经过上述过程,客户端持有 Client Random、Server Random 以及 Server Params,将 Server Params 使用服务端公钥解密后得到“Server Key Exchange”消息中的临时公钥,客户端使用 x25519 算法计算出预主密钥(Premaster Secret),然后再结合客户端随机数、服务端随机数以及预主密钥生成主密钥,最终构建“会话密钥”。“Change Cipher Spec”消息表示客户端已经生成密钥,并切换到加密模式。最后将之前所有的握手数据做一个摘要,再利用双方协商好的对称密钥进行加密, 通过“Encrypted Handshake Message”消息将加密数据传递给服务端做校验。数据内容如图所示:

5.4 第四次握手

服务端利用 Client Random、Server Random 以及 Client Params 计算得出“会话密钥”,向客户端传递“Change Cipher Spec”和“Encrypted Handshake Message”消息供客户端校验。当双方校验通过后,真正的数据才开始传输。

总结

您已经完成了本次 Codelab 的学习,并了解到以下知识点:

1.  使用 @ohos.net.http 建立一次 https 请求。

2.  通过分析 TLS/SSL 握手过程中的传输数据包来理解数据安全传输。

HarmonyOS HTTPS图片加载SSL证书过期解决 在 HarmonyOS 应用中加载来自 HTTPS URL 的图片时,如果 SSL 证书已过期,会导致图片加载失败(例如,显示错误占位符或空白)。这是因为系统默认拒绝不安全的连接。以下我将逐步解释原因并提供解决方案,帮助您安全可靠地处理此问题。优先推荐修复证书问题(如联系网站管理员更新证书)。如果问题持续,请提供更多上下文(如具体错误日志),我将进一步优化方案!如果测试需要,可以配置信任所有证书,但。 阅读详情

相关推荐

鸿蒙5.0版开发:ArkTS组件-AtomicServiceWeb

为开发者提供满足定制化诉求的Web高阶组件...........

m0_69424697的博客 893

HarmonyOS文件下载以及消息通知

核心api:0、效果:HarmonyOS下载图片和消息通知。

qq_57952018的博客 1608

鸿蒙开发入门:ArkTS与ArkUI实战指南

分布式操作系统是现代计算领域的重要发展方向,鸿蒙系统(HarmonyOS)作为华为自主研发的全场景操作系统,采用微内核架构实现跨设备协同。其核心技术包括声明式UI框架和ArkTS编程语言,ArkTS作为TypeScript的超集,通过静态类型检查和装饰器语法显著提升开发效率。在工程实践中,鸿蒙的DevEco Studio工具链提供了从编码到调试的完整支持,特别适合开发需要适配多种终端设备的应用。对于Android开发者转型鸿蒙,理解声明式编程范式与状态管理机制是关键突破点,这能帮助开发者快速构建高性能的分布

weixin_34292402的博客 417

54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接收发测试

54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接。连接远程服务器,tcp/ip,必须绑定本机IP。

Txwtech 2139

鸿蒙开发实战项目(五十一):HTTPS请求过程(ArkTS)

本篇Codelab基于网络模块以及Webview实现一次HTTPS请求,并对其过程进行抓包分析。

斌擎科技 1416

2024鸿蒙OS实战开发项目大全:从入门到精通(含101个实战案例)超详细的鸿蒙实战案例

从基础的UI组件到复杂的分布式场景,从ArkTS的细致教学到JS的灵活运用,这一百个项目涵盖了你需要知道的HarmonyOS实战技术和策略。我们会从溪村小镇的细节世界开始,深入多端部署的可能性,感受如购物应用和音乐专辑这样的实用系统是如何在HarmonyOS中获得生命的。忘却繁杂,把握简单,最后我们将以开发您的第一个快应用(初级版和高级版)为终结,为您的鸿蒙OS开发之旅画上完美的句号。这一百个项目不仅仅是教程或示例,它们是设计思维、创新灵感和开发技巧的集大成,是您实战开发HarmonyOS路上的重要伴侣。

斌擎科技 1万+

鸿蒙HarmonyOS开发环境安装与配置完全解析

华为鸿蒙系统是国内目前纯原生自产的热门移动应用开发系统,经过近几年的完善与优化,具有它特有的应用魅力与实用价值,诚邀国内外广大编程爱好者使用与推广。

sinat_30844883的博客 1万+

从零构建:如何用MATLAB和SDR硬件搭建你的第一个OFDM卫星通信原型系统

本文详细介绍了如何利用MATLAB和SDR硬件从零构建OFDM卫星通信原型系统。通过核心组件选型、开发环境配置、OFDM算法实现到系统集成与优化的完整流程,帮助通信工程学生和DIY爱好者快速掌握软件无线电技术在卫星通信中的应用。特别推荐使用HackRF One和MATLAB工具箱实现高性价比的OFDM系统验证。

pz890123456的博客 378

ArkTS 开发中,有两种网络请求

在鸿蒙开发中,ArkTS(Ark TypeScript)是用于构建鸿蒙应用的一种开发语言,它基于TypeScript,并提供了丰富的API和工具集来简化开发过程。其中,网络请求是开发应用时经常需要用到的一个功能。

读心悦 1924

国内优秀MES开源框架

一套springboot 开源框架 代码标准规范化。 界面展示 演示地址 http://wangziyangmes.pzzd.xyz 用户名admin 密码123 系统管理 工艺管理 计划管理 物料管理 *用户管理* *工艺路线管理* 工单下达...

q707231019的博客 2万+

Ai数字人直播系统源码部署

虚拟形象定制,直播内容智能生成,多语言支持,智能互动,声音克隆,24 小时不间断直播,多平台直播,智能数据分析,实时情感识别,视频合成,Ai数字人直播系统源码出售,Ai数字人直播系统源码部署实现 AI 数字人 24 小时不间断直播功能是一个较为复杂的任务,涉及到多个方面,如直播流的推送、内容的持续生成、系统的稳定性保障等。以下为你提供一个简化的实现思路和示例代码,借助 Python 结合 FFmpeg 工具来模拟 24 小时不间断直播。

weixin_ggwwsscc的博客 1256

鸿蒙HarmonyOS开发-Https 抓包配置_鸿蒙小程序抓包,2024年最新HarmonyOS鸿蒙 界面设计

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了。

2401_84164503的博客 1123

ML307A模组通过MQTT协议接入OneNET平台的AT指令全解析

本文详细解析了ML307A模组通过MQTT协议接入OneNET平台的完整AT指令流程。从平台侧的产品创建、设备添加,到核心难点连接密钥的计算方法,再到模组侧的基础网络附着、MQTT连接配置、数据收发及调试排错,提供了手把手的实战指南,帮助开发者快速实现物联网设备上云。

weixin_29240711的博客 492

从零打造鸿蒙 PC AI 应用:HarmonyOS 智慧校园助手开发实战

本文介绍了一款基于鸿蒙PC开发的智慧校园助手应用开发实战。该应用整合了课表管理、待办事项、校园问答和AI对话功能,充分利用鸿蒙PC的大屏优势实现高效信息处理。文章详细阐述了应用的四层架构设计(入口能力层、公共配置层、模型层和页面层),重点讲解了如何通过ArkTS/ArkUI实现大模型接入、本地数据管理和PC端适配优化。开发过程中采用了OpenAI兼容协议、系统提示词工程、响应式UI布局等技术方案,最终在鸿蒙MateBook Pro真机上实现了完整的运行效果,为鸿蒙PC生态的AI应用开发提供了可复用的实践参考

一键难忘的博客 3万+

【环境搭建】使用openSfM+MVSNet重建稠密点云

本帖详细介绍了如何使用openSfM+MVSNet对真实采集的数据进行稀疏重建与稠密重建,并针对一些真实场景下可能遇到的问题进行了整理。

YuhsiHu的博客 1971

OPTI Toolbox v2.28 安装与 3 个求解器补全:SCIP、SeDuMi、MOSEK 配置详解

本文详细介绍了OPTI Toolbox v2.28在MATLAB环境下的完整安装指南,包括SCIP、SeDuMi和MOSEK三个关键求解器的配置与优化技巧。通过分步指导和实战案例,帮助用户高效搭建强大的优化工具包,提升混合整数规划、二次约束二次规划等复杂问题的求解效率。

weixin_29039773的博客 350

【鸿蒙next开发】ArkUI框架:ArkTS组件-AtomicServiceWeb

本文详细介绍了HarmonyOS鸿蒙5.0中的AtomicServiceWeb组件开发指南。

m0_73088370的博客 752

全志F1C200S嵌入式驱动开发(lcd屏幕驱动)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 lcd RGB屏幕作为比较经济、实用的显示工具,在实际场景中使用较多。它的信号来说,一般也比较简单,除了常规的数据信号,剩下来就是行同步、场同步、数据使能和时钟信号了。数据信号方面,常见的格式有RGB888、RGB666、RGB565。为什么有什么多选择,主要还是取决于soc pin脚的多少来定。当然,pin脚越多,显示的颜色就越精准,还原度就越高。 举例来说,假设

嵌入式-老费,一个分享专业嵌入式知识的blog 2794

华为鸿蒙系统(HarmonyOS)调用天聚数行 API 教程

本文介绍了在HarmonyOS应用中调用天聚数行API获取"打工人语录"的方法。主要内容包括:1)准备工作:注册账号获取APIKey、创建项目并添加网络权限;2)代码实现:使用@ohos.net.http模块发起GET请求,处理返回数据并展示;3)注意事项:APIKey安全、HTTPS要求、调用频率限制等。通过封装网络请求函数和绑定UI组件,实现点击按钮获取并显示语录的功能。文章提供了完整的ArkTS示例代码,并建议将API调用封装为服务类,添加加载状态和缓存机制以优化用户体验。

天聚数行的博客 938

Python 爬虫实战:淘宝直播间实时数据抓取(弹幕分析 + 流量监控)

随着电商直播的迅猛发展,淘宝直播已成为品牌推广和商品销售的重要阵地。通过爬取淘宝直播间的实时数据,包括弹幕互动和流量信息,可以帮助商家深入了解用户行为、优化直播策略,同时为市场分析和商业决策提供数据支持。本文将深入探讨如何利用 Python 爬虫技术实现对淘宝直播间实时数据的抓取,并进行弹幕分析和流量监控。

u014481728的博客 729

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

鸿蒙(HarmonyOS)应用开发技能栈

从事鸿蒙(HarmonyOS)应用开发需要掌握以下关键技能,以确保能够高效开发高质量的应用程序。

u011732210的博客 1286

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

HarmonyOS 鸿蒙App开发不难:一个前端工程师的 ArkTS 上手实践

一个前端工程师的 HarmonyOS 上手实录,附一个已上架的真实应用。

liliang8164的博客 598

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

在鸿蒙 PC 上用 Rust 写一个 2048:ArkTS 负责界面,Rust 负责灵魂

鸿蒙应用的主力语言是 ArkTS(声明式 UI,类 TypeScript)。但很多场景下,我们希望把核心逻辑游戏规则、状态机这类纯逻辑,用 Rust 写既安全又好测,还能脱离 UI 单独跑单元测试;同一份 Rust 逻辑未来可复用到其它平台;鸿蒙提供 N-API(Node-API)桥接,ohos.rs把 napi-rs 适配到了鸿蒙,让 Rust 函数可以像 C++ native 模块一样被 ArkTSimport。逻辑层:纯 Rust,编译为cdylib,导出一个Game类。桥接。

DecorateCC的博客 5584

yuzu Switch 模拟器从零跑通:密钥放哪、固件装哪、卡顿怎么修

yuzu 是免费开源的 Switch 游戏模拟项目,C++ 实现,Windows、Linux、Android 三个平台都有维护中的构建,能把 Switch 上的游戏搬到电脑或手机上运行。它只提供"引擎",不含任何游戏内容。这篇按"先排故障、再调流畅"的顺序,讲清开局要备什么、卡了先动哪里。 ## 游戏打不开,先核对三样东西 列表里不显示、启动报错,多数是下面三项缺了一两样。 **密钥文件 p

gitblog_00392的博客 868

在 HarmonyOS/鸿蒙PC ArkTS 侧调用 C/C++ 三方库完整指南

本文介绍了在鸿蒙应用开发中集成C/C++三方库的完整流程,以libmediainfo为例,重点讲解了如何通过NAPI机制实现ArkTS与C/C++的交互。文章对比了直接链接和dlopen动态加载两种集成方式,推荐使用直接链接方法,并详细说明了项目结构设计、SO文件放置、头文件管理和NAPI桥接层的实现。通过编写C++包装代码,将三方库的C接口转换为ArkTS可调用的NAPI接口,最终实现在鸿蒙应用中调用libmediainfo库解析媒体文件信息的功能。

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 988

鸿蒙HarmonyOS开发-Https 抓包配置_harmony next 怎么抓包

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了。

2401_84164503的博客 1042
上一篇: HarmonyOS NEXT 调优工具 Smart Perf Host 高效使用指南
下一篇: Device Partner 平台合作伙伴认证和数据安全保护
「已注销」
博客等级 码龄5年 1045粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值