# 提交优化任务

## 功能介绍

调用此接口提交二进制优化任务。
> 说明
>
> 执行优化任务约半小时，请在本次优化任务结束后再调用该接口。

## 接口原型

|承载协议|HTTPS|
|-----|-----------------------------------------------------------------------|
|接口方向|开发者服务器 -> 华为服务器|
|接口方法|POST|
|接口URL|https://connect-api.cloud.huawei.com/api/gpos/binary/optimization|
|数据格式|* 请求：Content-Type: application/json * 响应：Content-Type: application/json|

## 请求参数

### Header

|参数|类型|必选(M)/可选(O)|说明|
|:------------|:-----|:----------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|Content-Type|string|M|固定取值为"application/json"。|
|client_id|string|M|客户端ID，即[创建API客户端](https://developer.huawei.com/consumer/cn/doc/games-guides/games-binary-optimization-agc-works-0000002342950440#section2939558155118)中生成的客户端ID。|
|Authorization|string|M|认证信息，格式为"Authorization: Bearer ${access_token}"，其中access_token为调用[获取Token](https://developer.huawei.com/consumer/cn/doc/games-references/games-api-binary-optimization-obtain-token-0000002408001421)接口返回的access_token。|
|projectId|string|M|在AppGallery Connect[创建项目和应用](https://developer.huawei.com/consumer/cn/doc/games-guides/games-binary-optimization-agc-works-0000002342950440#section210054711512)后的项目ID。最大长度20个字符。|

### Body

> 说明
>
> * 在相同**packageName** 和**version** 的情况下，若待传文件的**objectId**和之前某次未执行失败的优化任务传入的完全一样，则会直接返回之前已生成的任务ID。
> * profileFileObjectIds与soFileInfos内的fdataFileObjectId不能同时传入，否则会返回1019错误码。

|参数|类型|必选(M)/可选(O)|说明|
|:-----------------------|:---------------------------------------------------------------------------------------------------------------------|:----------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|soFileInfos|List<[SoInfo](#ZH-CN_TOPIC_0000002374401760__zh-cn_topic_0000001863302874_zh-cn_topic_0000001484067384_p121438156417)>|M|优化so文件需要携带的文件信息。最多20条。|
|profileFileObjectIds|List<string>|O|profile文件的对象ID列表，即调用[获取profile文件上传地址](https://developer.huawei.com/consumer/cn/doc/AppGallery-connect-References/binary-optimization-obtain-url-0000001863302878)接口返回的objectId，长度不超过512个字符。最多20条。 > 说明 > * 若首次优化，或游戏版本较上次版本的改动较大时，建议不复用历史profile文件，此时请携带本次游戏版本采集的profile文件。 > * 若优化debug so文件，请携带对应release包采集的profile文件即可。|
|packageName|string|M|游戏包名，与调用[提交插桩任务](https://developer.huawei.com/consumer/cn/doc/games-references/games-api-binary-optimization-submit-pile-task-0000002374241876)接口的入参packageName保持一致。最大长度256个字符。|
|version|string|M|游戏版本号，与调用[提交插桩任务](https://developer.huawei.com/consumer/cn/doc/games-references/games-api-binary-optimization-submit-pile-task-0000002374241876)接口的入参version保持一致。最大长度64个字符。|
|debug|boolean|O|是否是debug so： * true：是。 * false：否。 默认为false。|
|note|string|O|优化任务的备注信息，最多长度1024个字符。|
|isEnableExtraCompilerOpt|boolean|O|是否启用额外编译优化： * true：启用。 * false：关闭。 默认为false。 > 注意 > 启用额外的编译优化会允许对数据段指针地址的修改以提升性能，但这样的优化也存在风险。因此，若启用此选项，您需对优化后的结果进行全面测试以保障业务功能正常。|

SoInfo参数说明

|参数|类型|必选(M)/可选(O)|说明|
|:----------------|:-----|:----------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|soObjectId|string|M|so文件的对象ID，请上传原始so文件。最大长度512个字符。|
|symbolObjectId|string|O|symbol文件的对象ID，即调用[获取symbol文件上传地址](https://developer.huawei.com/consumer/cn/doc/AppGallery-connect-References/binary-optimization-obtain-url-0000001863302878)接口返回的objectId。最大长度512个字符。请在如下场景携带symbol文件： * 场景一：后续用于优化debug so文件。 * 场景二：后续用于小版本优化。|
|fdataFileObjectId|string|O|上一次优化成功后的fdata文件对象ID，即调用[获取优化结果](https://developer.huawei.com/consumer/cn/doc/games-references/games-api-binary-optimization-get-opt-result-0000002374241884)接口返回的fdataFileInfo。最大长度512个字符。 > 说明 > 若本次游戏版本较上次版本的改动较小，建议复用历史profile文件或携带fdata文件。|

## 请求示例

```screen
POST /api/gpos/binary/optimization
Host: connect-api.cloud.huawei.com
Content-Type: application/json
client_id: ***
Authorization: Bearer ***
projectId: ***

{
     "soFileInfos": [
       {
          "soObjectId": "pvt_2/GameCenter_perf_900_9/2/v3/8VJBonG4T1CyxP88MM0IuQ/xxx.so",
          "symbolObjectId": "pvt_11/GameCenter_perf_900_9/95/v3/T7isToURQDWCASqYyromWw/libunity.sym.so"
        }
     ],
    "profileFileObjectIds": ["pvt_2/GameCenter_perf_900_9/2/v3/8VJBonG4T1CyxP88MM0IuQ/xxx.tar"],
    "packageName": "com.test.company",
    "version": "1.0.0",
    "debug": false,
    "note":"任务备注信息"
}
```

## 响应参数

|参数|类型|必选(M)/可选(O)|说明|
|:---|:---------------------------------------------------------------------------------------------------------------------------------------|:----------|:-----------------------------------------------------------------|
|ret|[CommonRet](#ZH-CN_TOPIC_0000002374401760__zh-cn_topic_0000001863302874_zh-cn_topic_0000001484067384_p1170913233715)|M|包含返回码及描述信息的JSON字符串，格式为{"code":*retcode* , "msg": "*description*"}。|
|data|[SubmitBinaryOptimizationResult](#ZH-CN_TOPIC_0000002374401760__zh-cn_topic_0000001863302874_zh-cn_topic_0000001484067384_p886916120356)|O|若调用成功，将返回优化任务ID。|

CommonRet参数说明

|参数|类型|必选(M)/可选(O)|说明|
|:---|:-----|:----------|:---------------------------|
|code|int|O|[返回码](#section745914375139)。|
|msg|string|O|描述信息。|

SubmitBinaryOptimizationResult参数说明

|参数|类型|必选(M)/可选(O)|说明|
|:------|:-----------|:----------|:--------------------------------------------------------------------------------------------------------------------------------------------------------|
|taskIds|List<string>|M|优化任务ID列表，调用[获取优化结果](https://developer.huawei.com/consumer/cn/doc/games-references/games-api-binary-optimization-get-opt-result-0000002374241884)即可查询任务信息。|

## 响应示例

```screen
{
    "ret": {
        "code": 0,
        "msg": "Success"
    },
    "data": {
        "taskIds": [
              "1105625425926684672"
         ]
    }
}
```

## 返回码

|code|msg|Description|
|:---|:---------------------------------------------------|:------------------------------------------|
|0|Success.|成功。|
|1004|Unfinished task number has reached limit.|当前未完成的优化任务数累计超过20个。|
|1012|file info num not match.|soFileObjectId或profileFileObjectId传入错误。|
|1019|profile and fdata can not be both empty nor coexist.|传入参数中profile和fdata优化文件有且只能有一个。|
|1020|symbolObjectIds and fDataObjectIds not match.|fdata和symbol文件不匹配。一个fdata文件均有对应的一个symbol文件。|
|1025|The profileFiles contain file with the same name.|表示profile文件不允许重名。应将profile文件重命名后再上传。|
|1031|profile can not be empty.|输入base so优化时，profile文件不能为空。|
|3001|invalid parameters.|参数错误。|

