【HarmonyOS NEXT】从泄露的QQ.hap中分析QQ使用了哪些技术,为什么要用?

1. 背景

2024年10月15日晚上各大微信群和QQ群都在疯传QQ.hap ,最为火热的截图是,各种做QQbot 机器人的人兴奋的不得老,原因是:QQ.hap 解包后可以看到QQ的消息结构体使用的是protobuf,protobufdu对应的im_msg_body.proto 中描述了各种微信消息的类型和注释。

2. 分析QQ使用了哪些技术,为什么用?

笔者在拿到QQ.hap后,发现鸿蒙版的QQ其实使用了很多有意思的技术

2.1 protobuf

Protobuf是Protocol Buffers的简称,它是Google公司开发的一种数据描述语言,是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化 。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。

2.2 protobuf 优点

序列化后体积相比Json和XML很小,序列化反序列化速度很快,总之就是吊打JSON,在鸿蒙中可使用@ohos/protobufjs 库使用。
protobufjs使用文档:https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Fprotobufjs

2.2 webview 调试脚本

众所周知,鸿蒙中想要使用Devtools工具调试前端Webview 比较麻烦,QQ编写了一个快捷的sh脚本,可用来调试Webbview

2.3 应用启动框架AppStartup

AppStartup是鸿蒙官方出的应用启动框架,类似Android中的JetPack App Startup,主要解决APP启动时初始化多个任务用的,可以支持任务的异步启动,加快应用启动速度。同时,通过在一个配置文件中统一设置多个启动任务的执行顺序以及依赖关系,让执行启动任务的代码变得更加简洁清晰、容易维护。

官方使用文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-startup-V5

2.4 APNG

APNG是Mozilla公司出的,动态可移植网络图形(英语:Animated Portable Network Graphics,缩写APNG)是一种继承自便携式网络图形(PNG)的文件格式,它允许像GIF格式一样播放动态图片,并且拥有GIF不支持的24位图像和8位透明性。 它还保留了与非动画PNG文件的向后兼容性。

鸿蒙中使用APNG文档:https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Fapng

2.5 Xlog 日志框架

libqlog_kit.so,Xlog mars 中的一个子组件,是mars 是微信官方的终端基础组件,是一个使用 C++ 编写的业务性无关,平台性无关的基础组件。

Xlog 优点

xlog相比其它日志模块,有如下优点:

  • 高性能高压缩率
  • 不丢失任何一行日志
  • 避免系统卡顿
  • 避免CPU波峰
  • 支持数据加密

2.6 lottie-动画库

lottie是一个适用于OpenHarmony的动画库,它可以解析Adobe After Effects软件通过Bodymovin插件导出的json格式的动画,并在移动设备上进行本地渲染。

鸿蒙中使用lottie文档:https://ohpm.openharmony.cn/#/cn/detail/@ohos%2Flottie

lottie 优点

  • 支持跨平台,开发成本较低,一套Lottie动画可以在Android/IOS/Web多端使用。
  • 性能好,端上除了解析json,基本没有其他耗性能的操作;并且相比于需要存储较多图片的帧动画,Lottie可以节省比较多的内存空间。
  • 可以从服务端配置URL实现,不需要APP发版就可以实现更新。

2.7 Compose Multiplatform -跨端UI框架

Compose Multiplatform 是基于 Kotlin 和 Jetpack Compose 构建的跨平台开发框架,旨在简化多平台应用程序的开发流程。开发者可以使用相同的代码库来构建适用于不同平台的用户界面,并充分利用 Kotlin 语言的表达能力和可靠性。这意味着开发者可以通过 Compose Multiplatform 编写一次代码,并将其部署到 iOS、Android、桌面和 Web 等多个平台上,从而降低开发成本、提高效率和加快上线速度。

其它基于Kotlin Multiplatform的鸿蒙跨平台开发实践:https://juejin.cn/post/7404858270513152000

个人猜测部分页面使用了KMP实现,类似腾讯视频的方案,当然也不排除,只是使用可KMP写业务逻辑

3. 总结

C++ 才是王道

<think>我们正在处理的问题是:DevEco Studio 5.0 打开项目时报错 "Select an OpenHarmony or HarmonyOS project"。根据引用内容,我们注意到用户可能是在尝试打开一个项目,但DevEco Studio无法识别它为鸿蒙项目。结合引用[4]中提到的Project Type选择Application,以及Compatible API Version选择最新SDK版本(如5),我们可以推断错误可能是由于项目配置不正确或缺失鸿蒙项目特有的文件导致的。 解决方案思路: 1. 确认项目结构:鸿蒙项目应有特定的目录结构,如entry/src/main目录下包含config.json(引用[4]中强调了创建工程时的选择)。 2. 检查项目配置:确保项目根目录有正确的配置文件,如build.gradle等。 3. 考虑代理或环境问题:引用[1]提到代理配置可能导致SDK下载问题,但这里错误是项目识别问题,所以暂时不考虑。引用[3]提到环境变量设置,但该问题与路径设置有关,如果项目路径包含中文或特殊字符也可能导致问题。 具体步骤: 方法一:验证项目结构 1. 检查项目根目录下是否存在entry/src/main/config.json文件。如果没有,则需要创建(可参考引用[4]中创建工程时的结构)。 2. 如果config.json文件存在,检查其内容是否正确。一个基本的config.json内容如下(参考引用[4]): ```json { "app": { "bundleName": "com.example.myapp", "vendor": "example", "version": { "code": 1, "name": "1.0" } }, "deviceConfig": {}, "module": { "name": "entry", "type": "entry", "deviceTypes": [ "phone" ], "abilities": [ { "name": "MainAbility", "icon": "$media:icon", "description": "$string:mainability_description", "label": "$string:entry_MainAbility", "launchType": "standard" } ] } } ``` 3. 确保项目根目录下的build.gradle文件包含鸿蒙的构建插件。例如: ```groovy buildscript { repositories { maven { url 'https://repo.huaweicloud.com/repository/maven/' } // 其他仓库... } dependencies { classpath 'com.huawei.ohos:hap:3.0.5.2' // 根据DevEco Studio版本选择插件版本 } } ``` 方法二:重新导入项目 1. 关闭当前项目,回到DevEco Studio的欢迎界面。 2. 选择“Open an Existing Project”,然后选择项目根目录(注意:不是entry目录,而是整个项目目录)。 3. 如果项目结构正确,此时应该能正确识别。 方法三:检查环境变量(引用[3]) 如果项目路径中包含特殊字符或空格,或者环境变量设置有问题,可能导致IDE无法正确识别项目。可以尝试: 1. 将项目移动到纯英文路径下。 2. 设置环境变量(如引用[3]中提到的HVIGOR_USER_HOME): - 在终端中执行:`launchctl setenv HVIGOR_USER_HOME /User/xx` (将路径替换为你的.hvigor目录的绝对路径) - 重启DevEco Studio。 方法四:创建新项目并迁移 如果上述方法无效,可以尝试创建一个新的鸿蒙项目(引用[4]中提到的选择Application,API Version 5等),然后将原有代码和资源文件复制到新项目的对应目录中。 注意事项: - 确保使用的DevEco Studio版本与项目所需的SDK版本兼容(引用[2]中提到了DevEco Studio NEXT Developer Beta1,而用户使用的是5.0,所以需要确认5.0是否支持对应的SDK)。 - 如果项目是从旧版本升级而来,可能需要更新gradle配置。 如果问题仍然存在,请检查IDE日志(Help -> Show Log in Explorer)以获取更多错误信息。 引用说明: 引用[4]提供了创建鸿蒙项目时的正确配置步骤,因此我们按照这个配置来验证项目结构。 引用[3]提供了环境变量设置的方法,用于解决路径问题。 生成相关问题: 1. 如何正确配置鸿蒙项目的config.json文件? 2. 在DevEco Studio中如何创建新项目? 3. 如何将旧版鸿蒙项目升级到最新SDK? 4. 如何查看DevEco Studio的日志以排查问题? 5. 鸿蒙项目的标准目录结构是怎样的?</think>### 解决 DevEco Studio 5.0 报错 "Select an OpenHarmony or HarmonyOS project" 的方法 #### 🔍 错误原因分析 该错误表明 DevEco Studio 5.0 **无法识别当前项目为鸿蒙项目**,主要原因是: 1. **项目结构缺失**:缺少 `config.json` 等鸿蒙核心配置文件[^4] 2. **SDK 版本不匹配**:项目配置的 API Version 与已安装的 SDK 不兼容[^4] 3. **工程类型错误**:项目被识别为普通 Java/Android 项目而非鸿蒙项目 4. **环境变量问题**:HVIGOR 构建工具路径未正确配置[^3] #### ✅ 解决方案(分步操作) ##### 方法一:修复项目结构(推荐) 1. **创建鸿蒙配置文件** ```bash # 在项目根目录执行 mkdir -p entry/src/main touch entry/src/main/config.json ``` 2. **填充基础配置**(参考[^4]) ```json { "app": { "bundleName": "com.example.app", "vendor": "example", "version": { "code": 1, "name": "1.0" } }, "module": { "name": "entry", "type": "entry", "deviceTypes": ["phone"], "abilities": [{ "name": "MainAbility", "launchType": "standard" }] } } ``` ##### 方法二:配置兼容性 SDK 1. 打开 `build.gradle` 文件 2. 确保配置匹配 SDK 5.0[^4]: ```groovy ohos { compileSdkVersion 5 // 必须与已安装SDK版本一致 defaultConfig { compatibleSdkVersion 5 // 兼容API Version 5 } } ``` 3. 同步 Gradle:点击 **File > Sync Project with Gradle Files** ##### 方法三:设置 HVIGOR 环境变量(Mac/Linux) 1. 查找 `.hvigor` 目录路径(通常在用户主目录) 2. 终端执行[^3]: ```bash launchctl setenv HVIGOR_USER_HOME /Users/yourname/.hvigor ``` 3. 重启 DevEco Studio ##### 方法四:重建项目标识 1. 关闭 IDE 2. 删除项目中的 IDE 缓存: ```bash rm -rf .idea .gradle ``` 3. 创建项目类型标记文件: ```bash echo '{"projectType":"HarmonyOS"}' > .harmonyos ``` 4. 重新通过 **File > Open** 打开项目 #### ⚙️ 配置验证检查表 | 检查项 | 正确配置 | 错误配置 | |-------|---------|----------| | **SDK 版本** | compatibleSdkVersion: 5 | compatibleSdkVersion: 4 | | **设备类型** | deviceTypes: ["phone"] | deviceTypes: [] | | **模块类型** | type: "entry" | type: "feature" | | **构建工具** | HVIGOR_USER_HOME 已设置 | 未设置环境变量 | | **配置文件** | entry/src/main/config.json 存在 | 文件缺失 | #### 🌐 云开发项目特别说明 如果使用 **云开发模板**(Cloud Foundation Kit)[^2]: 1. 确保选择正确的工程模板: ```mermaid graph LR A[新建工程] --> B{工程类型} B -->|应用| C[Application] B -->|云开发| D[Cloud Template] ``` 2. 在 `cloud > config.json` 中添加云服务配置 3. 同步端云依赖:运行 `gradlew assembleCloud` #### 📌 关键注意事项 1. **SDK 兼容性**: - 必须安装 **HarmonyOS SDK API Version 5**[^4] - 在 **Tools > SDK Manager** 中验证安装 2. **代理问题**: ```bash # 如果下载SDK失败(参考[^1]) echo 'proxy=http://your-proxy:port' >> ~/.gradle/gradle.properties ``` 3. **项目目录规范**: - 路径不能包含中文或特殊字符 - 推荐纯英文路径:`/Projects/HarmonyOS/MyApp` > 完成修复后,重启 DevEco Studio 并观察右下角状态栏: > ```mermaid > graph TB > A[状态栏] --> B{HarmonyOS标识} > B -->|显示SDK版本| C[5.0.3.405] > B -->|未显示| D[重新检查配置] > ```
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冉冉同学_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值