# Android构建
Android构建用于编译应用资源和源代码，并将它们打包成可供部署、签署和分发的APK。
- [图形化构建]
  1. 在[配置构建步骤](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0059.html)中，添加"Android构建"构建步骤，参考[表1]配置参数。
      表1Android构建参数说明 
     | **参数**    | **说明**                                                                                                                                                                                                                                                                                                                               |
     |:---|:---|
     | 步骤显示名称     | 构建步骤的名称，可自定义修改。 - 支持中文、英文、数字、"-"、"_"、英文逗号、英文分号、英文冒号、"."、"/"、圆括号（中英文）。  - 字符长度范围为1\~128。   |
     | Gradle      | 根据用户实际开发环境的需要，选择对应的工具版本。 CodeArts Build支持的工具版本，可查看[构建工具版本](https://support.huaweicloud.com/productdesc-codeci/cloudbuild_07_0004.html)。若当前的工具版本不满足您的使用要求，您可以[制作镜像并推送到SWR仓库](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0013.html)。                                               |
     | JDK         | 根据用户实际开发环境的需要，选择对应的工具版本。 CodeArts Build支持的工具版本，可查看[构建工具版本](https://support.huaweicloud.com/productdesc-codeci/cloudbuild_07_0004.html)。若当前的工具版本不满足您的使用要求，您可以[制作镜像并推送到SWR仓库](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0013.html)。                                                  |
     | NDK        | 支持的全部版本如下，根据需要选择NDK版本，也可以选择"不使用"。 CodeArts Build支持的工具版本，可查看[构建工具版本](https://support.huaweicloud.com/productdesc-codeci/cloudbuild_07_0004.html)。若当前的工具版本不满足您的使用要求，您可以[制作镜像并推送到SWR仓库](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0013.html)。                                         |
     | 命令       | 配置Gradle命令，一般使用系统默认给出的命令即可。如果需要配置更多命令，可参考[Gradle官网](https://gradle.org/releases/)。                                                                                                                                                                                                                                                 |
     | 失败后是否继续运行 | 当前步骤执行失败后是否继续执行下一个步骤，根据实际使用场景选择是或否。                                                                                                                                                                                                                                                                                               |
        
     
  
  2. 如果需要使用apksigner对Android APK进行签名，可添加"Android APK签名"构建步骤，参数说明如下：
     
     | **参数**             | **说明**                                                                                                                                                                                                                                                                                                                                  |
     |:---|:---|
     | 步骤显示名称             | 构建步骤的名称，可自定义修改。 - 支持中文、英文、数字、"-"、"_"、英文逗号、英文分号、英文冒号、"."、"/"、圆括号（中英文）。  - 字符长度范围为1\~128。   |
     | 需要签名的APK路径         | Android构建后生成要签名的".apk"文件位置。 支持正则表达式，如：可以使用"build/bin/\*.apk"匹配构建出来的APK包。                                                                                                                                                                                                                                |
     | Keystore文件       | 在下拉框中选择用于签名的Keystore文件。文件的制作以及上传指导可参考[生成并上传Keystore签名文件]。                                                                                                                                                                                                                                       |
     | keystore password | 可选参数。 填写自定义的密钥文件密码。                                                                                                                                                                                                                                                                                    |
     | 别名（Alias）        | 自定义密钥别名。 - 以字母开头，支持字母、数字、"_"、"-"和"."。  - 字符长度为1\~128。                                                                                                                      |
     | key password       | 可选参数。 填写自定义的密钥密码。                                                                                                                                                                                                                                                                                     |
     | apksigner命令行      | 自定义签名的参数，默认"--verbose"显示签名详情。                                                                                                                                                                                                                                                                                                        |
     | 失败后是否继续运行            | 当前步骤执行失败后是否继续执行下一个步骤，根据实际使用场景选择是或否。                                                                                                                                                                                                                                                                                                   |
        
     配置完成后执行构建任务，当显示任务执行成功后，查看构建日志，若"Android APK签名"步骤对应日志中显示结果"Signed"，表示签名成功。
     
   
- [代码化构建]
  参考以下代码示例，修改在[创建代码化构建使用的YAML文件](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0058.html#codeci_ug_0058__section72391847131511)中的BUILD部分代码信息。
  1. Android构建代码示例如下：
     ```
     version: 2.0 # 必须是2.0
     steps:
       BUILD:
         - android:
             inputs:
               gradle: 4.8 
               jdk: 1.8
               ndk: 17
               command: | 
                 cat ~/.gradle/init.gradle
                 cat ~/.gradle/gradle.properties
                 cat ~/.gradle/init_template.gradle
                 rm -rf ~/.gradle/init.gradle
                 rm -rf /home/build/.gradle/init.gradle
                 # 使用CodeArts Build提供的gradle wrapper,充分利用缓存加速
                 cp /cache/android/wrapper/gradle-wrapper.jar ./gradle/wrapper/gradle-wrapper.jar
                 # 构建未签名的APK
                 /bin/bash ./gradlew assembleDebug -Dorg.gradle.daemon=false -d --stacktrace
              ignore_fail: true
     ```
     表2Android构建代码示例参数说明 
     | **参数名** **称** | **参数类型** | **参数说明**                                                                                                                                                                                                                                                                             |
     |:---|:---|:---|
     | command        | string     | 填写Gradle执行命令。如果需要配置更多命令，可参考[Gradle官网](https://gradle.org/releases/)。                                                                                                                                                                                                                |
     | gradle        | string   | 根据用户实际开发环境的需要，选择对应的工具版本。 CodeArts Build支持的工具版本，可查看[构建工具版本](https://support.huaweicloud.com/productdesc-codeci/cloudbuild_07_0004.html)。若当前的工具版本不满足您的使用要求，您可以[制作镜像并推送到SWR仓库](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0013.html)。 |
     | jdk           | string   | 根据用户实际开发环境的需要，选择对应的工具版本。 CodeArts Build支持的工具版本，可查看[构建工具版本](https://support.huaweicloud.com/productdesc-codeci/cloudbuild_07_0004.html)。若当前的工具版本不满足您的使用要求，您可以[制作镜像并推送到SWR仓库](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0013.html)。 |
     | ndk           | string  | 根据用户实际开发环境的需要，选择对应的工具版本。 CodeArts Build支持的工具版本，可查看[构建工具版本](https://support.huaweicloud.com/productdesc-codeci/cloudbuild_07_0004.html)。若当前的工具版本不满足您的使用要求，您可以[制作镜像并推送到SWR仓库](https://support.huaweicloud.com/usermanual-codeci/codeci_ug_0013.html)。 |
     | ignore_fail    | string    | 用于控制当前步骤执行失败后是否继续执行下一个步骤。 - true：是。  - 为空：否。                 |
        
     
     
  
  2. Android APK签名代码示例如下：
     ```
     version: 2.0 # 必须是2.0
     steps:
       BUILD:
         - android_sign:
                 inputs:
                    file_path: build/bin/*.apk
                        keystore_file: androidapk.jks
                        keystore_password: xxxxxx
                        alias: keyalias
                        key_password: xxxxxx
                        apksigner_commond: --verbose
                        ignore_fail: true
     ```
     表3Android APK签名代码示例参数说明 
     | **参数名** **称**     | **参数类型** | **参数说明**                                                                                                                                                                                                                                                                          |
     |:---|:---|:---|
     | file_path          | string  | Android构建后生成要签名的".apk"文件位置。 支持正则表达式，如：可以使用"build/bin/\*.apk"匹配构建出来的APK包。                                                                                                                                                                           |
     | keystore_file      | string   | Keystore文件名。文件的制作以及上传指导可参考[生成Keystore签名文件并上传至文件管理]。                                                                                                                                                                                       |
     | keystore_password | string  | 可选参数。 填写自定义的密钥文件密码。                                                                                                                                                                                                                              |
     | alias              | string   | 密钥别名。 - 以字母开头，支持字母、数字、"_"、"-"和"."。  - 字符长度为1\~128。   |
     | key_password       | string    | 可选参数。 填写自定义的密钥密码。                                                                                                                                                                                                                               |
     | apksigner_commond  | string    | 自定义签名的参数，默认"--verbose"显示签名详情。                                                                                                                                                                                                                                                    |
     | ignore_fail         | string     | 用于控制当前步骤执行失败后是否继续执行下一个步骤。 - true：是。  - 为空：否。                                                                                                |
        
     
   
#### Android版本说明
- SDK：用户项目构建compileSdkVersion版本。
- Build Tools：用户项目构建所需buildToolsVersion版本。
两个版本可以在项目下的"build.gradle"文件或是项目的全局配置文件（用户自定义）中找到。
![](https://support.huaweicloud.com/usermanual-codeci/zh-cn_image_0000001910907922.png)
![](https://support.huaweicloud.com/usermanual-codeci/public_sys-resources/caution_3.0-zh-cn.png)
- 用户需要选择正确的compileSdkVersion版本和buildToolsVersion版本。
- 也支持Gradle的wrapper构建方式，如果提供的gradle版本没有满足您的要求，您也可以直接使用gradlew命令，使用wrapper去构建，会自动下载您所需要的gradle版本，构建命令例如：./gradlew clean build。
 
 #### 生成Keystore签名文件并上传至文件管理
1. Keystore签名文件有以下两种生成方式。
   - **使用JDK的keytool工具生成签名文件**
     1. 找到JDK安装位置以及keytool.exe。 ![](https://support.huaweicloud.com/usermanual-codeci/zh-cn_image_0000001917067882.png)
        
     
     2. 执行生成密钥命令，生成.jks文件。
        ```
        keytool -genkeypair -storepass 123456 -alias apksign -keypass 123456 -keyalg RSA -validity 20000 -keystore D:/android.jks
        ```
        ![](https://support.huaweicloud.com/usermanual-codeci/zh-cn_image_0000001947506921.png)
        
      
   
   - **使用Android Studio生成签名文件**
     1. 打开Studio客户端，选择"Build \> Generate Signed Bundle/APK"。 ![](https://support.huaweicloud.com/usermanual-codeci/zh-cn_image_0000001917227830.png)
        
     
     2. 选择"APK"，单击"Next"。
     
     3. 单击"Create new..."，在弹出框填写相关信息，单击"OK"，然后单击"Next"。 ![](https://support.huaweicloud.com/usermanual-codeci/zh-cn_image_0000001917067902.png)
        
     
     4. 签名文件成功生成，查看文件。 ![](https://support.huaweicloud.com/usermanual-codeci/zh-cn_image_0000001947506933.png)
        
      
    
2. 上传"Keystore签名文件"到文件管理，分为两种上传方式。
   - 在"Android构建"构建步骤的"Keystore文件"处，单击"上传"，在弹出的窗口中选择文件，添加描述，勾选相关协议，然后单击"保存"。
   
   - 在编译构建服务首页，单击"更多 \> 文件管理"，单击"上传文件"，在弹出的窗口中选择文件，添加描述，勾选相关协议，然后单击"保存"。
    
 
#### 相关文档
Android的常见问题可参考[使用Android构建时常见问题](https://support.huaweicloud.com/codeci_faq/codeci_faq_0003.html)。
