# IDE编译报错：ERROR: SDK component missing解决方案

#### 问题现象

写好的脚本，在流水线中可以运行，但是放在IDE的Terminal中，无法编译，报错：

```
> hvigor ERROR: SDK component missing. Please verify the integrity of your SDK.
```

#### 背景知识

开发Hvigor插件：Hvigor允许开发者实现自己的插件，开发者可以定义自己的构建逻辑，并与他人共享。

#### 解决方案

此报错表示SDK路径已配置，但是路径中没有找到SDK。

*   **方案一：**
    
    原因可能是开发工具IDE的SDK版本与Command Line Tools的hvigor版本不兼容。
    
    *   按照官网文档在流水线配置command-line-tools，不配置环境变量DEVECO\_SDK\_HOME，编译的时候会自动找到command-line-tools的SDK；如果配置了DEVECO\_SDK\_HOME，就优先找DEVECO\_SDK\_HOME指向的。
    *   IDE的Terminal在打开的时候会注入环境变量DEVECO\_SDK\_HOME，指向的是ide里的SDK。
    
    在流水线中跑脚本，使用的是command-line-tools的SDK，与hvigor的版本配套；但是在IDE的Terminal中跑脚本，hvigor用的是command-line-tools里的版本，SDK用的是ide里的版本，两者不匹配，故导致报错。
    
    升级command-line-tools版本与IDE的SDK版本兼容即可解决问题。
    
*   **方案二：**
    
    通过以下步骤进行排查。
    
    1.  找到SDK所在目录，在IDE的Terminal中输入echo $env:DEVECO\_SDK\_HOME，SDK根目录不要指向default目录！！！
        
    2.  检查SDK路径下的文件放置顺序是否正确。检查各文件、目录是否有缺失，如有缺失，请将对应的文件补齐。确保这些文件和文件夹的名称都是正确的并存在，目录结构如下：
        
    3.  检查sdk-pkg.json文件是否与IDE配套：
        *   在替换full SDK时可能会修改sdk-pkg.json文件的内容，导致该文件内容与IDE版本不配套（如非必要，请在替换full SDK时不要修改此文件）
        *   打开sdk-pkg.json文件，查看apiVersion字段是否与IDE支持的API匹配，两者必须要相同，否则就会出现找不到SDK的错误。
            
    4.  如果上面几步都无效，检查工程是否做了一体化适配：
        *   执行同步工程的操作。
            
        *   观察右侧Notifications中是否出现了Sync failed的提示。
            
        *   点击提示语中的Migrate Assistant，工程下方会打开Migrate Assistant的窗口，点击里面的Migrate按钮，待执行成功后再去编译。
            
    5.  检查工程是否配置了hvigor版本：
        
        如果有，需要删除，因为目前都是使用一体化的版本，版本自带有hvigor工具。删除之后重新同步工程。
        

#### 常见FAQ

Q：使用高版本API, Command Line Tools工具(最新版本)打包报错:hvigor ERROR: 00303168 Configuration Error?

A：是因为SDK版本低导致的，需要将build-profile.json5文件里面compatibleSdkVersion字段删除或者将字段后面的API18改成19，就能成功打包。

#### 总结

*   查看IDE和Command Line Tools的版本对应关系，可找到对应版本的下载链接，确保Build Version与IDE版本一致。
*   查看代码使用的hvigor版本：在工程级hvigorfile.ts加一行代码。
    
    ```
    console.info(require.resolve('@ohos/hvigor'))
    ```
    
*   查看代码使用的SDK版本：在工程/.hvigor/outputs/build-logs/build.log搜索OpenHarmony。