构建 Android 项目

本指南涵盖的内容 #

本指南涵盖了特定于 Android 项目的构建环境和配置主题。请务必先阅读我们的 教程通用构建配置 指南。

macOS 环境中不可用 Android 构建。

Android 项目的 CI 环境 #

概述 #

Android 构建目前仅在我们的 Trusty Build 环境中正式支持,因此您需要在您的 .travis.yml 文件中明确指定 dist: trusty

Travis CI 环境为 JVM 语言提供了一组丰富的构建工具,包括 多个 JDK、Ant、Gradle、MavensbtLeiningen.

通过设置

language: android
dist: trusty

在您的 .travis.yml 文件中,您的项目将在 Android 环境中构建,该环境提供 Android SDK 工具 25.2.3。

以下是一个 Android 项目的 .travis.yml 示例

language: android
dist: trusty
android:
  components:
    # Uncomment the lines below if you want to
    # use the latest revision of Android SDK Tools
    # - tools
    # - platform-tools

    # The BuildTools version used by your project
    - build-tools-26.0.2

    # The SDK version used to compile your project
    - android-26

    # Additional components
    - extra-google-google_play_services
    - extra-google-m2repository
    - extra-android-m2repository

    # Specify at least one system image,
    # if you need to run emulator(s) during your tests
    - sys-img-x86-android-26
    - sys-img-armeabi-v7a-android-17

如何安装 Android SDK 组件 #

在您的 .travis.yml 中,您可以定义要安装的 SDK 组件列表,如下面的示例所示

language: android
dist: trusty
android:
  components:
    - build-tools-26.0.2
    - android-26
    - extra

必须指定确切的组件名称(也接受 add-onextra 等筛选器别名)。要获取可用的确切组件名称和描述列表,请运行命令 sdkmanager --list(最好在本地开发机器上)。

处理许可证 #

默认情况下,Travis CI 将接受所有请求的许可证,但也可以定义要接受的许可证白名单,如下面的示例所示

language: android
dist: trusty
android:
  components:
    - build-tools-26.0.2
    - android-26
    - add-on
    - extra
  licenses:
    - 'android-sdk-preview-license-52d11cd2'
    - 'android-sdk-license-.+'
    - 'google-gdk-license-.+'

为了更灵活,许可证也可以使用正则表达式引用(使用 Tcl 语法,因为 expect 命令用于自动响应交互式提示)。

预安装的组件 #

虽然以下组件是预安装的,但确切的列表可能会在未经事先通知的情况下更改。为了确保您的构建环境的稳定性,我们建议您为您的项目明确指定所需的组件。

  • tools
  • platform-tools
  • build-tools-25.0.2
  • android-25
  • extra-google-google_play_services
  • extra-google-m2repository
  • extra-android-m2repository

如何创建和启动模拟器 #

警告:目前,这些步骤未完全支持 Travis CI Android 构建器。

如果您有冒险精神,可以使用脚本 /usr/local/bin/android-wait-for-emulator 并调整您的 .travis.yml 以使此模拟器可用于您的测试。例如

# Emulator Management: Create, Start and Wait
before_script:
  - echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a -c 100M
  - emulator -avd test -no-audio -no-window &
  - android-wait-for-emulator
  - adb shell input keyevent 82 &

依赖项管理 #

Travis CI Android 构建器假设您的项目使用 JVM 构建工具(如 Maven 或 Gradle)构建,该工具会在运行测试之前自动下载项目依赖项,无需您进行任何操作。

如果您的项目使用 Ant 或任何其他不自动处理依赖项的构建工具构建,则需要使用 .travis.yml 中的 install: 键指定要运行的确切命令,例如

language: android
dist: trusty
install: ant deps

Maven 的默认测试命令 #

如果您的项目在存储库根目录中具有 pom.xml 文件,但没有 build.gradle 文件,则将使用 Maven 3 构建它。默认情况下,它将使用

mvn install -B

运行您的测试套件。这可以在 通用构建配置 指南中所述进行覆盖。

Gradle 的默认测试命令 #

如果您的项目在存储库根目录中具有 build.gradle 文件,则将使用 Gradle 构建它。默认情况下,它将使用

gradle build connectedCheck

运行您的测试套件。如果您的项目还在存储库根目录中包含 gradlew 包装器脚本,Travis Android 构建器将尝试使用它代替。默认命令将变为

./gradlew build connectedCheck

这可以在 通用构建配置 指南中所述进行覆盖。

缓存 #

Gradle 中依赖项缓存的一个特殊之处意味着为了避免在每次构建后上传缓存,您需要将以下行添加到您的 .travis.yml

before_cache:
  - rm -f  $HOME/.gradle/caches/modules-2/modules-2.lock
  - rm -fr $HOME/.gradle/caches/*/plugin-resolution/
cache:
  directories:
    - $HOME/.gradle/caches/
    - $HOME/.gradle/wrapper/
    - $HOME/.android/build-cache

默认测试命令 #

如果 Travis CI 无法检测到 Maven 或 Gradle 文件,Travis CI Android 构建器将尝试使用 Ant 构建您的项目。默认情况下,它将使用

ant debug install test

运行您的测试套件。这可以在 通用构建配置 指南中所述进行覆盖。

针对多个 JDK 进行测试 #

与任何 JVM 语言一样,也可以 针对多个 JDK 进行测试.

构建矩阵 #

对于 Android 项目,envjdk 可以作为数组给出以构建构建矩阵。

在新的构建环境上构建 Android 项目 #

dist: trusty 构建环境是 Android 唯一支持的构建环境,但如果您想在更新的构建环境(例如 dist: jammy)上构建,您可以行使对 Travis CI 构建环境的访问权限并安装所需的软件包和工具。下面可以查看一个 .travis.yml 配置示例

os: linux
language: java
jdk: openjdk17

env:
 global:
  - ANDROID_HOME=$HOME/travis-tools/android
  - ANDROID_SDK_ROOT=$HOME/travis-tools/android

before_install:
 # PREPARE FOR ANDROID SDK SETUP
 - mkdir -p $HOME/travis-tools/android && mkdir $HOME/.android && touch $HOME/.android/repositories.cfg
 - cd $ANDROID_HOME && wget -q "https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip" -O commandlinetools.zip
 - unzip -q commandlinetools.zip && cd cmdline-tools
 - mv * tools | mkdir tools && cd $TRAVIS_BUILD_DIR

 # SETUP PATH(s)
 - export PATH=$ANDROID_HOME/cmdline-tools/tools/bin/:$PATH
 - export PATH=$ANDROID_HOME/emulator/:$PATH
 - export PATH=$ANDROID_HOME/platform-tools/:$PATH

install:
 # INSTALL REQUIRED ANDROID SDK TOOLS
 - sdkmanager --sdk_root=$ANDROID_HOME --list | awk '/Installed/{flag=1; next} /Available/{flag=0} flag'
 - yes | sdkmanager --sdk_root=$ANDROID_HOME --install "platform-tools" "platforms;android-33" "build-tools;33.0.2" "emulator" "system-images;android-33;google_apis;x86_64"
 - sdkmanager --list --sdk_root=$ANDROID_HOME | awk '/Installed/{flag=1; next} /Available/{flag=0} flag'
 # CREATE AVD
 - echo "no" | avdmanager --verbose create avd --force --name "my_android_33" --package "system-images;android-33;google_apis;x86_64" --tag "google_apis" --abi "x86_64"
 - sudo chmod -R 777 /dev/kvm
 # Start emulator in background and wait for it to start
 - adb kill-server && adb start-server &
 - sleep 15 # sleep values may require adjusting depending on the specific build environment
 - emulator @my_android_33 -no-audio -no-window &
 - sleep 60

script:
 - sdkmanager --list --sdk_root=$ANDROID_HOME | awk '/Installed/{flag=1; next} /Available/{flag=0} flag'
 - adb devices
 - .....

示例 #

构建配置参考 #

您可以在我们的 Travis CI Build Config Reference 中找到有关 Android 构建配置格式的更多信息。