Travis CI构建找不到Android Constraint Layout

时间:2017-03-29 10:21:27

标签: android travis-ci

我正在使用Travis CI构建我的Android应用程序,但由于com.android.support.constraint:constraint-layout我正在处理构建失败。我看到了其他问题,但它们对我没用。

我的.travis.yml文件:

language: android
android:
   components:
   - tools
   - tools #Running this twice get's the latest build tools (https://github.com/codepath/android_guides/wiki/Setting-up-Travis-CI)
   - platform-tools
   - android-24
   - build-tools-25.0.0
   - extra
   - extra-google-google_play_services
   - extra-google-m2repository
   - extra-android-m2repository
   - addon-google_apis-google-24
   licenses:
   - android-sdk-license-.+
   - '.+'

jdk: oraclejdk8

sudo: required

script:
   - chmod +x gradlew
   - ./gradlew clean build

before_install:
  - mkdir "$ANDROID_HOME/licenses" || true
  - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license"
  - echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"

我收到了一个错误:

> Could not resolve all dependencies for configuration ':app:_debugApkCopy'.
   > Could not find any matches for com.android.support.constraint:constraint-layout:+ as no versions of com.android.support.constraint:constraint-layout are available.
     Searched in the following locations:
         file:/usr/local/android-sdk/extras/android/m2repository/com/android/support/constraint/constraint-layout/maven-metadata.xml
         file:/usr/local/android-sdk/extras/android/m2repository/com/android/support/constraint/constraint-layout/
         file:/home/travis/build/*****/sdk-manager/com/android/support/constraint/constraint-layout/maven-metadata.xml
         file:/home/travis/build/*****/sdk-manager/com/android/support/constraint/constraint-layout/
     Required by:
         project :app

知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

我认为您需要在tools之后更新platform-tools,因为这样的代码依赖性:

android:
  components:
    - tools
    - build-tools-25.0.2
    - platform-tools
    - tools

尝试使用此related answer的简化版本,如果您通过sdkmanager进行安装,则可以使用1 2 3

language: android
jdk: oraclejdk8
sudo: required

android:
  components: # Cookbooks version: https://github.com/travis-ci/travis-cookbooks/tree/9c6cd11
    - tools # Update preinstalled tools from revision 24.0.2 to 24.4.1
    - build-tools-25.0.2 # Match build-tools version used in build.gradle
    - platform-tools # Update platform-tools to revision 25.0.3+
    - tools # Update tools from revision 24.4.1 to 25.2.5

env:
  global:
    - API=25 # Android API level 25 by default
    - TAG=google_apis # Google APIs by default, alternatively use default
    - ABI=armeabi-v7a # ARM ABI v7a by default
    - QEMU_AUDIO_DRV=none # Disable emulator audio to avoid warning
    - ANDROID_HOME=/usr/local/android-sdk-24.0.2 # Depends on the cookbooks version used in the VM
    - TOOLS=${ANDROID_HOME}/tools # PATH order matters, exists more than one emulator script
    - PATH=${ANDROID_HOME}:${ANDROID_HOME}/emulator:${TOOLS}:${TOOLS}/bin:${ANDROID_HOME}/platform-tools:${PATH}
    - ADB_INSTALL_TIMEOUT=20 # minutes (2 minutes by default)

before_install:
  - export EMULATOR="system-images;android-${API};${TAG};${ABI}" # Used to install/create emulator
  - echo 'count=0' > /home/travis/.android/repositories.cfg # Avoid warning

install:
  # List and delete unnecessary components to free space
  - sdkmanager --list || true
  - sdkmanager --uninstall "system-images;android-15;default;armeabi-v7a"

  # Update sdk tools to latest version and install/update components
  - echo yes | sdkmanager "tools"
  - echo yes | sdkmanager "platforms;android-25" # Latest platform required by SDK tools
  - echo yes | sdkmanager "platforms;android-${API}" # Android platform required by emulator
  - echo yes | sdkmanager "extras;android;m2repository"
  - echo yes | sdkmanager "extras;google;m2repository"
  - echo yes | sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2"
  - echo yes | sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.2"
  - echo yes | sdkmanager "$EMULATOR" # Install emulator system image
  # Create and start emulator
  - echo no | avdmanager create avd -n acib -k "$EMULATOR" -f --abi "$ABI" --tag "$TAG"
  - emulator -avd acib -engine classic -no-window -verbose -qemu -m 512 &

before_script:
  # Wait for emulator fully-booted and disable animations
  - android-wait-for-emulator
  - adb shell settings put global window_animation_scale 0 &
  - adb shell settings put global transition_animation_scale 0 &
  - adb shell settings put global animator_duration_scale 0 &
  - adb shell input keyevent 82 &

script:
  - ./gradlew build connectedCheck

after_script:
  - cat ${TRAVIS_BUILD_DIR}/*/build/outputs/androidTest-results/connected/*

答案 1 :(得分:0)

对我来说最简单的解决方案是将SDK许可证从SDK复制到我的项目中,然后告诉Travis在构建时将它们复制到自己。

在Travis的Github页面上已经有一个已经关闭的问题,其中一个提到的解决方案肯定在当前工作。

<强>解决方案

  1. 复制Android SDK根目录中的licenses文件夹。
  2. 将其粘贴到.travis.yml文件所在的同一层次结构中您自己项目的根目录中。
  3. 将这些命令添加到.travis.yml的{​​{1}}区块:
  4. <强> .travis.yml

    before_install

    解决方案的完全链接:https://github.com/travis-ci/travis-ci/issues/6617#issuecomment-369580270

    在另一个SO问题上链接到我的原始答案:https://stackoverflow.com/a/49050480/1402616