【HarmonyOS开发】记录一次SDK的适配流程
共 2832字,需浏览 6分钟
·
2024-04-10 20:27
学习最好的方式就是使用项目来学习,最近在开发一个移动白板,参考官方的Demo,但是发现无法运行,最终发现SDK不匹配导致,记录一下处理过程。
效果展示
1、升级适配前;
发现一堆的报错,看着着实有点头大
2、升级适配后;
找寻问题
1、安装依赖;
2、在预览器中查看,编译;
3、分析问题可能性
-
是否SDK导致API不匹配,升级 / 降级是否可以解决;
-
分析错误原因;
解决方式
1、升级/降级是否可以解决
1.1 发现该项目使用的是API10进行编译的,先将其 降 为API9试试;
1.2 查看是否切换成功;
1.3 重新编译是否可行,可以最好,不行的话只能从代码层次去进行适配
还是老样子,不行
2、分析代码错误原因
2.1 从整体上看,是由于设备管理这个库报的错
进入接口文件,发现里面并没有什么内容,从API7开始支持,因此可以判定,这个库(@ohos.distributedHardware.deviceManager)不能使用喽!
2.2 查询是否存在可替代的库
还真有,这一点OpenHarmony做的有点不地道,API10中还保留有原有的API,但是里面的属性方法没了~~~
2.3 代码层次适配
点击预览器日志,进入每个错误里面,进行代码层次的适配,有一点需要注意,新的API中可能不包含旧的方法,需要查找替代的方法。
如何查找替代方法
1、在API文档中找到报错版本中的方法;
2、使用关键字在新API文档中查询替代方法;
如果有,直接替换即可
// 修改前
import deviceManager from '@ohos.distributedHardware.deviceManager';
@StorageLink('deviceList') deviceList: deviceManager.DeviceInfo[] = [];
// 修改后
import deviceManager from '@ohos.distributedDeviceManager';
@StorageLink('deviceList') deviceList: deviceManager.DeviceBasicInfo[] = [];
但是,有点悲催,并没有找到很方便的替代方法,但是我们找到了可以组合起来使用的方法,最终修改为
// 修改前
import deviceManager from '@ohos.distributedHardware.deviceManager';
try {
this.localDevice = this.myDeviceManager.getLocalDeviceInfoSync();
this.localDevice.deviceName = CommonConstants.LOCALHOST_NAME;
} catch (error) {
Logger.error('RemoteDeviceModel',
`getLocalDeviceInfo failed, error=${JSON.stringify(error)}`);
}
// 修改后
import deviceManager from '@ohos.distributedDeviceManager';
try {
this.localDevice.deviceId = this.myDeviceManager.getLocalDeviceId();
this.localDevice.deviceName = CommonConstants.LOCALHOST_NAME;
this.localDevice.deviceType = this.myDeviceManager.getDeviceType(this.localDevice.deviceId);
} catch (error) {
Logger.error('RemoteDeviceModel',
`getLocalDeviceInfo failed, error=${JSON.stringify(error)}`);
}[];
个人观点
OpenHarmony的代码审核是很繁琐,流程很麻烦的,而且审核人员很多都是HW的开发者,上到仓库的代码,至少应该保证可用,还有基于不同SDK版本开发的,最好能够使用分支进行记录,方便大家查看,最新的SDK,在很多实际项目中,都还未使用,我们肯定是基于最稳定的版本进行开发。希望官方后面可以优化一下,也望2024OpenHarmony更上一层楼。@OpenHarmony