低版本手机应用市场是否能搜索到高版本应用
====================

#### 问题现象

应用版本为高版本(例如API 15)，但手机系统版本为低版本(例如API 12)，此时高版本应用在低版本手机应用市场是否能被搜索到？

#### 背景知识

*   [应用开发过程使用的SDK版本](https://developer.huawei.com/consumer/cn/doc/harmonyos-releases/app-compatibility-influence-factor#section99881928838)主要涉及三个字段：compileSdkVersion，targetSdkVersion和compatibleSdkVersion。更多关于参数的介绍可以参考工程级build-profile.json5文件中[products](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-hvigor-build-profile-app#section45865492619)下字段介绍。
    *   compileSdkVersion：打包后在module.json文件中的字段为compileSdkVersion，编译应用工程的SDK版本，取值默认为DevEco Studio自带的SDK版本，不能修改。
    *   targetSdkVersion：打包后在module.json文件中的字段为targetAPIVersion，应用运行的目标SDK版本。
    *   compatibleSdkVersion：打包后在module.json文件中的字段为minAPIVersion，应用运行要求的最低SDK版本。该字段决定了打包的应用的API版本。运行该应用的终端设备系统搭载的API版本不能低于该字段的值，低于则无法安装。
*   [运行应用的设备系统所搭载的API版本](https://developer.huawei.com/consumer/cn/doc/harmonyos-releases/app-compatibility-influence-factor#section31894501031)，表示设备的API版本。可在设备设置页面进入“关于手机”查看“API版本”的值获取，也可以通过hdc命令来查询。

#### 解决方案

应用版本为高版本(例如API 15)，手机系统版本为低版本(例如API 12)，低版本手机应用市场能否安装高版本应用，主要受compatibleSdkVersion影响。

例如：compatibleSdkVersion设置为11，在API 12的手机能搜索到应用，也能正常安装；但compatibleSdkVersion设置为13时，在API 12的手机能搜索到应用，但当用户点击安装此应用时，会提示此应用“无法安装”并给出所需要的系统版本要求。

#### 常见FAQ

Q：应用配置compatibleSdkVersion需要注意什么？

A：在应用的工程配置中，三个SDK版本属性之间的大小关系为：compatibleSdkVersion值≤targetSdkVersion值≤compileSdkVersion值，如果配置不符合这个规则，会有报错提示。虽然配置compatibleSdkVersion参数值可以达到在更低版本的ROM上安装应用的目的，但应用是否能正常运行需要开发者自行验证与保障，具体保护方式可以参考[API兼容性保护和告警屏蔽](https://developer.huawei.com/consumer/cn/doc/harmonyos-releases/app-compatibility-apis-compatibility)。

Q：HarmonyOS开发推荐的最小SDK版本是多少？

A：可以参考[存量设备API版本使用数量](https://developer.huawei.com/consumer/cn/doc/harmonyos-releases/sdk-version-percentage)，开发者可根据占比来为应用合理定义需要兼容的API版本。

Q：手机系统为高版本(例如API 20)，应用的targetSdkVersion版本为低版本(例如API 17)，高版本的手机上能否安装targetSdkVersion为低版本的应用？

A：targetSdkVersion指定应用的目标运行版本，主要用于控制API行为变更的兼容性（如系统根据targetSdkVersion值决定是否启用新API行为）。不影响安装过程，只影响应用在设备上的运行时行为。手机系统API版本高于targetSdkVersion时，应用可以正常安装，但可能因API行为变更导致功能异常。

Q：API接口版本为高版本(例如API 20)，手机系统版本为低版本(例如API 12)，如果项目中不做任何API版本判断，该接口功能是无效还是直接会导致项目报错？

A：若项目build-profile.json5文件中的compileSdkVersion字段低于使用的API接口兼容的最低版本，项目中不做任何API版本判断的话，项目运行到调用此API接口的地方会运行报错。