一、问题现象最近在用DevEco Studio给设备运行应用时遇到了这样一个报错ErrorCode: 00401004ErrorDescription: Please try to match the API version of the device and the app. The current device does not contain the following SysCap attributes in the rpcid.json file: SystemCapability.Telephony.CellularCall. Make sure the device supports all the SysCap attributes required for running the app.刚看到这个报错的时候我第一反应是是不是API 版本不匹配因为报错里面有一句Please try to match the API version of the device and the app.但后来仔细看后半段才发现真正的问题不在 API version而在 SysCap。二、问题本质分析报错里最关键的一句其实是The current device does not contain the following SysCap attributes:SystemCapability.Telephony.CellularCall也就是说当前应用要求了SystemCapability.Telephony.CellularCall但是当前运行设备并不具备这个系统能力所以安装/运行时直接失败报了00401004这里的SystemCapability.Telephony.CellularCall一看名字就知道和电话/蜂窝通话能力有关。如果你的设备本身不是手机而是开发板工控设备平板不带蜂窝通话能力的终端那么它没有这个 SysCap 很正常。所以这个问题本质上不是“代码写错了”而是应用声明的系统能力超过了当前设备实际具备的系统能力。三、我的解决办法如果你的应用根本不需要电话/蜂窝通话功能那就可以在模块里增加syscap.json把这个不需要的能力移除掉。1、在模块目录下新建syscap.json路径如下entry/src/main/syscap.json2、写入以下内容{ devices: { general: [ default ] }, production: { removedSysCaps: [ SystemCapability.Telephony.CellularCall ] } }3、然后重新构建工程建议按下面顺序操作Clean Project删除模块下的build目录重新Sync再次运行/安装应用我这边就是这样处理后问题解决的。四、为什么这样能解决因为当前并不是设备坏了也不是代码语法错误而是应用带上了一个当前设备没有的能力要求。通过syscap.json里的removedSysCaps: [ SystemCapability.Telephony.CellularCall ]可以把这个当前模块里“不需要但被带进来的系统能力”移除掉。这样一来应用要求的能力集减少了和设备实际支持的能力集匹配了应用就可以正常安装/运行了五、注意事项这个方法不是无脑通杀有一个前提前提你的应用真的没有用到电话功能也就是说你的工程里最好确认一下没有真正依赖这些内容TelephonyKitCellularCallcallManager电话/拨号/通话相关 API某些带电话能力的三方库因为如果你的代码里本来就真的在用这些功能那你只是把 SysCap 声明删掉后面运行到相关逻辑时依然可能报错。六、建议顺手做一个全局搜索为了保险一点可以在 DevEco Studio 里全局搜一下这些关键词TelephonyKitCellularCallcallManagerTelephony电话通话看看是不是代码里直接写了相关调用某个 HAR/HSP/三方依赖间接带进来的工程模板里默认引入了某些不需要的能力七、排查这类问题的思路总结以后再遇到这种错误不要只盯着错误码00401004。更应该重点关注报错里有没有出现SystemCapability.xxx到底是哪个 SysCap 缺失这个能力是不是当前设备本来就不支持如果应用没用到能不能通过syscap.json去掉这类问题很多时候不是代码 bug而是能力声明和目标设备不匹配。八、最终结论这次 DevEco Studio 报错00401004表面上看像是 API version 问题实际上是应用要求了SystemCapability.Telephony.CellularCall但当前设备不支持该 SysCap。如果你的应用并不需要电话/蜂窝通话能力可以在模块下新增entry/src/main/syscap.json内容如下{ devices: { general: [ default ] }, production: { removedSysCaps: [ SystemCapability.Telephony.CellularCall ] } }然后重新清理、同步、编译、安装一般就能解决。
DevEco Studio 报错 ErrorCode: 00401004,缺少 SystemCapability.Telephony.CellularCall 的解决记录
一、问题现象最近在用DevEco Studio给设备运行应用时遇到了这样一个报错ErrorCode: 00401004ErrorDescription: Please try to match the API version of the device and the app. The current device does not contain the following SysCap attributes in the rpcid.json file: SystemCapability.Telephony.CellularCall. Make sure the device supports all the SysCap attributes required for running the app.刚看到这个报错的时候我第一反应是是不是API 版本不匹配因为报错里面有一句Please try to match the API version of the device and the app.但后来仔细看后半段才发现真正的问题不在 API version而在 SysCap。二、问题本质分析报错里最关键的一句其实是The current device does not contain the following SysCap attributes:SystemCapability.Telephony.CellularCall也就是说当前应用要求了SystemCapability.Telephony.CellularCall但是当前运行设备并不具备这个系统能力所以安装/运行时直接失败报了00401004这里的SystemCapability.Telephony.CellularCall一看名字就知道和电话/蜂窝通话能力有关。如果你的设备本身不是手机而是开发板工控设备平板不带蜂窝通话能力的终端那么它没有这个 SysCap 很正常。所以这个问题本质上不是“代码写错了”而是应用声明的系统能力超过了当前设备实际具备的系统能力。三、我的解决办法如果你的应用根本不需要电话/蜂窝通话功能那就可以在模块里增加syscap.json把这个不需要的能力移除掉。1、在模块目录下新建syscap.json路径如下entry/src/main/syscap.json2、写入以下内容{ devices: { general: [ default ] }, production: { removedSysCaps: [ SystemCapability.Telephony.CellularCall ] } }3、然后重新构建工程建议按下面顺序操作Clean Project删除模块下的build目录重新Sync再次运行/安装应用我这边就是这样处理后问题解决的。四、为什么这样能解决因为当前并不是设备坏了也不是代码语法错误而是应用带上了一个当前设备没有的能力要求。通过syscap.json里的removedSysCaps: [ SystemCapability.Telephony.CellularCall ]可以把这个当前模块里“不需要但被带进来的系统能力”移除掉。这样一来应用要求的能力集减少了和设备实际支持的能力集匹配了应用就可以正常安装/运行了五、注意事项这个方法不是无脑通杀有一个前提前提你的应用真的没有用到电话功能也就是说你的工程里最好确认一下没有真正依赖这些内容TelephonyKitCellularCallcallManager电话/拨号/通话相关 API某些带电话能力的三方库因为如果你的代码里本来就真的在用这些功能那你只是把 SysCap 声明删掉后面运行到相关逻辑时依然可能报错。六、建议顺手做一个全局搜索为了保险一点可以在 DevEco Studio 里全局搜一下这些关键词TelephonyKitCellularCallcallManagerTelephony电话通话看看是不是代码里直接写了相关调用某个 HAR/HSP/三方依赖间接带进来的工程模板里默认引入了某些不需要的能力七、排查这类问题的思路总结以后再遇到这种错误不要只盯着错误码00401004。更应该重点关注报错里有没有出现SystemCapability.xxx到底是哪个 SysCap 缺失这个能力是不是当前设备本来就不支持如果应用没用到能不能通过syscap.json去掉这类问题很多时候不是代码 bug而是能力声明和目标设备不匹配。八、最终结论这次 DevEco Studio 报错00401004表面上看像是 API version 问题实际上是应用要求了SystemCapability.Telephony.CellularCall但当前设备不支持该 SysCap。如果你的应用并不需要电话/蜂窝通话能力可以在模块下新增entry/src/main/syscap.json内容如下{ devices: { general: [ default ] }, production: { removedSysCaps: [ SystemCapability.Telephony.CellularCall ] } }然后重新清理、同步、编译、安装一般就能解决。