1e41f4b71Sopenharmony_ci# OpenHarmony SDK 升级助手 2e41f4b71Sopenharmony_ci## 简介 3e41f4b71Sopenharmony_ciOpenHarmony SDK 升级助手,用于帮助开发者快速解决OpenHarmony应用SDK升级导致的API不兼容问题。</br> 4e41f4b71Sopenharmony_ci由于OpenHarmony SDK Beta版本不承诺API稳定性,在SDK升级后,可能存在API不兼容的问题,应用开发者对现在工程切换API版本后,需要适配API接口及其底层行为的变更,存在一定的升级成本;因此OpenHarmony提供了SDK升级助手,可以帮助开发者快速了解升级适配全貌,并通过工具提示快速适配升级,显著提高SDK升级效率。 5e41f4b71Sopenharmony_ci 6e41f4b71Sopenharmony_ci## 约束与限制 7e41f4b71Sopenharmony_ci1. 应用在升级SDK之前,需要将旧版本的SDK文件进行备份,以免被新版本SDK给覆盖掉。 8e41f4b71Sopenharmony_ci2. 目前suap工具仅支持OpenHarmony应用升级SDK时使用。 9e41f4b71Sopenharmony_ci 10e41f4b71Sopenharmony_ci## 使用教程 11e41f4b71Sopenharmony_ci 12e41f4b71Sopenharmony_ci### 工具安装 13e41f4b71Sopenharmony_ci1.在DevEco Studio主菜单栏中点击 "File" > "Settings..."。 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ci2.在Settings弹出框界面,选中"Plugins"进入IDE插件模块 18e41f4b71Sopenharmony_ci 19e41f4b71Sopenharmony_ci3.点击"Marketplace"选项,在下方搜索框中输入"OpenHarmony SDK Upgrade Assistant" 20e41f4b71Sopenharmony_ci 21e41f4b71Sopenharmony_ci4.点击搜索到的插件右方"Install"按钮进行下载安装,安装完成之后点击"Apply"按钮,重启IDE即安装成功(注意:插件安装完成后需要重启IDE) 22e41f4b71Sopenharmony_ci 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ci 25e41f4b71Sopenharmony_ci### 使用工具 26e41f4b71Sopenharmony_ci 27e41f4b71Sopenharmony_ci辅助升级插件安装好后,打开需要升级的OpenHarmony工程。 28e41f4b71Sopenharmony_ci 29e41f4b71Sopenharmony_ci工程加载完毕后,点击窗口上方主菜单栏的"UpdateCheck" > "Start"。 30e41f4b71Sopenharmony_ci 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci 33e41f4b71Sopenharmony_ci手动选择旧版本SDK路径,需要选择到“ets”文件夹。新版本SDK路径将通过IDE配置文件及当前应用配置的SDK版本自动获取。路径选择完成后,点击“OK”按钮,开始生成辅助升级报告。 34e41f4b71Sopenharmony_ci 35e41f4b71Sopenharmony_ci 36e41f4b71Sopenharmony_ci 37e41f4b71Sopenharmony_ci报告生成成功后,将弹窗提示,点击“OK”按钮,关闭当前弹窗。 38e41f4b71Sopenharmony_ci 39e41f4b71Sopenharmony_ci 40e41f4b71Sopenharmony_ci 41e41f4b71Sopenharmony_ci根据弹窗提示,打开下方工具栏内UpdateReport按钮,查看升级报告 42e41f4b71Sopenharmony_ci 43e41f4b71Sopenharmony_ci 44e41f4b71Sopenharmony_ci 45e41f4b71Sopenharmony_ci### 报告功能点介绍 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ci1. 报告下方总数为因升级SDK导致当前应用出现的问题总数,帮助快速评估修改工作量 48e41f4b71Sopenharmony_ci2. 报告的每个标题头都可以单击进行排序 49e41f4b71Sopenharmony_ci3. 报告中选择类型下拉框可以选择升级类型原因,下方总计会根据选择的类型更改数量 50e41f4b71Sopenharmony_ci4. 是否已修改功能可以帮助开发者记录哪些问题已修改,避免出现重复工作量 51e41f4b71Sopenharmony_ci5. 双击代码所在位置列,可以快速定位到当前代码在应用中位置 52e41f4b71Sopenharmony_ci6. 提示信息列会提供修改建议,供开发者参考修改 53e41f4b71Sopenharmony_ci7. changelog列如果多个版本,单击之后会出现弹出框,将版本号和链接罗列,点击进行跳转。单个版本变更,单击之后,直接跳转到对应的ChangeLog文档中 54e41f4b71Sopenharmony_ci 55e41f4b71Sopenharmony_ci 56e41f4b71Sopenharmony_ci 57e41f4b71Sopenharmony_ci## 打包构建 58e41f4b71Sopenharmony_ci 59e41f4b71Sopenharmony_ci1.[interface仓](https://gitee.com/openharmony/interface_sdk-js/tree/master/build-tools)中 clone [api_diff](https://gitee.com/openharmony/interface_sdk-js/tree/master/build-tools/api_diff)工具(对比两个版本SDK里的API差异)和[collect_application_api](https://gitee.com/openharmony/interface_sdk-js/tree/master/build-tools/collect_application_api)工具(用于解析并汇总应用中使用到的API)到本地。 60e41f4b71Sopenharmony_ci 61e41f4b71Sopenharmony_ci 62e41f4b71Sopenharmony_ci 63e41f4b71Sopenharmony_ci2.在本地api_diff工具和collect_application_api工具目录下进入终端,进行安装和编译。 64e41f4b71Sopenharmony_ci 65e41f4b71Sopenharmony_ci> **说明:** 66e41f4b71Sopenharmony_ci> 67e41f4b71Sopenharmony_ci> 需保证node.js版本为14. 68e41f4b71Sopenharmony_ci> 69e41f4b71Sopenharmony_ci 70e41f4b71Sopenharmony_ci输入命令:npm install,之后进行构建:npm run build。构建成功之后,会在对应的工具文件夹下生成dist=>build=>api-diff.js和dist=>build=>api-collector.js 71e41f4b71Sopenharmony_ci 72e41f4b71Sopenharmony_ci 73e41f4b71Sopenharmony_ci 74e41f4b71Sopenharmony_ci 75e41f4b71Sopenharmony_ci3.在本地磁盘的最后一个盘符,创建名为'updateCheck'文件夹,内部分别创建'api-diff'和'collect_application_api'文件夹。</br>将步骤3中的api-diff.js文件放置'api-diff'文件夹下,collect_application_api文件夹下libs文件夹以及api-collector.js放置在'collect_application_api'文件夹下。 76e41f4b71Sopenharmony_ci 77e41f4b71Sopenharmony_ci 78e41f4b71Sopenharmony_ci 79e41f4b71Sopenharmony_ci 80e41f4b71Sopenharmony_ci4.升级辅助工具源码clone下来之后,在idea上打开,需要配置gradle环境,并且在src同级目录下新建'build.gradle.kts'文件,将下面内容粘贴至文件中,刷新gradle,在idea右侧gradle工具栏即可运行项目和打包成插件。 81e41f4b71Sopenharmony_ci```lombok.config 82e41f4b71Sopenharmony_ciplugins { 83e41f4b71Sopenharmony_ci id("java") 84e41f4b71Sopenharmony_ci id("org.jetbrains.intellij") version "1.5.2" 85e41f4b71Sopenharmony_ci} 86e41f4b71Sopenharmony_ci 87e41f4b71Sopenharmony_cigroup = "com.example" 88e41f4b71Sopenharmony_civersion = "1.0-SNAPSHOT" 89e41f4b71Sopenharmony_ci 90e41f4b71Sopenharmony_cirepositories { 91e41f4b71Sopenharmony_ci maven { 92e41f4b71Sopenharmony_ci setUrl("https://mirrors.huaweicloud.com/repository/maven") 93e41f4b71Sopenharmony_ci } 94e41f4b71Sopenharmony_ci} 95e41f4b71Sopenharmony_ci 96e41f4b71Sopenharmony_cidependencies{ 97e41f4b71Sopenharmony_ci implementation("org.springframework:spring-web:5.2.12.RELEASE") 98e41f4b71Sopenharmony_ci implementation("org.apache.commons:commons-compress:1.21") 99e41f4b71Sopenharmony_ci implementation("com.alibaba:fastjson:1.2.28") 100e41f4b71Sopenharmony_ci implementation("org.apache.logging.log4j:log4j-core:2.19.0") 101e41f4b71Sopenharmony_ci implementation("commons-httpclient:commons-httpclient:3.1") 102e41f4b71Sopenharmony_ci} 103e41f4b71Sopenharmony_ci 104e41f4b71Sopenharmony_ciintellij { 105e41f4b71Sopenharmony_ci version.set("2021.2") 106e41f4b71Sopenharmony_ci type.set("IC") // Target IDE Platform 107e41f4b71Sopenharmony_ci 108e41f4b71Sopenharmony_ci plugins.set(listOf(/* Plugin Dependencies */)) 109e41f4b71Sopenharmony_ci} 110e41f4b71Sopenharmony_ci 111e41f4b71Sopenharmony_citasks { 112e41f4b71Sopenharmony_ci // Set the JVM compatibility versions 113e41f4b71Sopenharmony_ci withType<JavaCompile> { 114e41f4b71Sopenharmony_ci sourceCompatibility = "11" 115e41f4b71Sopenharmony_ci targetCompatibility = "11" 116e41f4b71Sopenharmony_ci } 117e41f4b71Sopenharmony_ci 118e41f4b71Sopenharmony_ci patchPluginXml { 119e41f4b71Sopenharmony_ci sinceBuild.set("212") 120e41f4b71Sopenharmony_ci untilBuild.set("522.*") 121e41f4b71Sopenharmony_ci } 122e41f4b71Sopenharmony_ci 123e41f4b71Sopenharmony_ci signPlugin { 124e41f4b71Sopenharmony_ci certificateChain.set(System.getenv("CERTIFICATE_CHAIN")) 125e41f4b71Sopenharmony_ci privateKey.set(System.getenv("PRIVATE_KEY")) 126e41f4b71Sopenharmony_ci password.set(System.getenv("PRIVATE_KEY_PASSWORD")) 127e41f4b71Sopenharmony_ci } 128e41f4b71Sopenharmony_ci 129e41f4b71Sopenharmony_ci publishPlugin { 130e41f4b71Sopenharmony_ci token.set(System.getenv("PUBLISH_TOKEN")) 131e41f4b71Sopenharmony_ci } 132e41f4b71Sopenharmony_ci} 133e41f4b71Sopenharmony_ci 134e41f4b71Sopenharmony_ci 135e41f4b71Sopenharmony_ci```