# APILevelAdapt **Repository Path**: wustcat404/APILevelAdapt ## Basic Information - **Project Name**: APILevelAdapt - **Description**: API兼容性示例demo - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2025-12-05 - **Last Updated**: 2025-12-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实现多API版本兼容 ## 项目介绍 本项目演示在 HarmonyOS 多版本环境下,如何在同一套代码中实现 API 能力探测与优雅降级,进而实现优雅的 API 兼容策略,覆盖 ArkTS层与Native层两类典型场景: 1. **ArkTS(UI 层)**:通过 `deviceInfo.sdkApiVersion` / `deviceInfo.distributionOSApiVersion` 判断系统版本,选择高版本新特性或低版本替代实现。 2. **Native(NAPI/C++ 层)**: - 通过 `dlopen + dlsym` 对动态库符号进行探测,判断某个系统 API 是否存在,从而避免低版本调用导致崩溃。 - 通过OH_GetDistributionOSApiVersion()获取ISV发行版系统api版本并判断系统版本,选择高版本新特性或低版本特性替代实现。 ## 效果图预览 | 首页 | 滚动场景 | 音频音量场景 | | :------------------------------------------: | :------------------------------------------: | :------------------------------------------: | | | | | ## 使用说明 1. 将独立的应用示例工程导入DevEco Studio进行编译构建及运行调试。 2. 安装运行后,即可在设备上查看应用示例运行效果,以及进行相关调试。 ## 工程目录 ``` ├──entry/src/main/cpp │ ├──classdef │ │ ├──include │ │ │ ├──ArkUIBaseNode.h // 组件树操作的基类 │ │ │ ├──ArkUINode.h // 通用组件的封装 │ │ │ ├──ArkUIButtonNode.h // 实现按钮组件的封装类 │ │ │ └──NativeModuleInstance.h // ArkUI在Native侧模块的封装接口 │ │ └──src │ │ ├──ArkUIBaseNode.cpp // 组件树操作的基类 │ │ ├──ArkUINode.cpp // 通用组件的封装 │ │ ├──ArkUIButtonNode.cpp // 实现按钮组件的封装类 │ │ └──NativeModuleInstance.cpp // ArkUI在Native侧模块的封装接口 │ ├──function │ │ ├──include │ │ │ ├──IntegratingWithArkts.h // 接入ArkTS界面 │ │ │ └──NativeEntry.h // 管理Native组件生命周期 │ │ └──src │ │ └──IntegratingWithArkts.cpp // 接入ArkTS界面 │ └──types │ │ └──libentry │ │ ├──Index.d.ts // Native侧接口导出声明文件 │ │ └──oh-package.json5 │ ├──CMakeLists.txt // cmake配置文件 │ └──napi_init.cpp // 接口映射、模块注册 ├──entry/src/main/ets // 代码区 │ ├──contants │ │ └──CommonConstants.ets // 常量类 │ ├──entryability │ │ └──EntryAbility.ets // 程序入口类 │ ├──entrybackupability │ │ └──EntryBackupAbility.ets // 应用数据备份和恢复类 │ ├──pages │ │ ├──ActionBarScene.ets // HdsActionBar组件版本兼容示例展示页 │ │ ├──AudioVolumeScene.ets // 音频音量场景兼容示例展示页 │ │ ├──ButtonDisplayScene.ets // Button组件版本兼容示例展示页 │ │ ├──Index.ets // 首页 │ │ ├──MarqueeDisplayScene.ets // 走马灯场景兼容性示例展示页 │ │ └──ScrollScene.ets // 滚动场景兼容示例展示页 │ └──utils │ └──Logger.ets // 日志工具类 └──entry/src/main/resources // 应用资源目录 ``` ## 实现说明 本项目采用三类兼容策略:**版本判断**、**能力探测**和**安全装配**,确保应用在不同HarmonyOS版本上优雅运行。 ### ArkTS层兼容 - **API版本分支**:通过`deviceInfo.sdkApiVersion`或`deviceInfo.distributionOSApiVersion`判断,选择高版本API或降级实现 - *ActionBar示例*:API 6.0.0+(60000)使用HdsActionBar,低版本用基础组件模拟 - *Text/Marquee*:仅在API 18+启用跑马灯效果 - **特性按需装配**:Scroll组件通过"特性规格表"动态注册API 12/18/20的不同能力,使用WeakSet避免重复绑定 ### Native层兼容 - **版本阈值判断**:使用`OH_GetDistributionOSApiVersion()`与预设阈值(如50101对应5.1.1)选择不同UI枚举值 - **动态符号探测**:通过`dlopen/dlsym`检测系统库符号是否存在,避免低版本调用崩溃 - **严格生命周期管理**:Native节点创建与销毁严格配对,防止资源泄漏 ## 相关权限 不涉及 ## 约束与限制 1. 本示例仅支持标准系统上运行,支持设备:华为手机。 2. HarmonyOS系统:HarmonyOS 6.0.0及以上。 3. DevEco Studio版本:DevEco Studio 6.0.0及以上。 4. HarmonyOS SDK版本:HarmonyOS 6.0.0 SDK及以上。