1

I am using Travis CI to build my Android app, but I am dealing with build failure due to com.android.support.constraint:constraint-layout. I saw other questions but they didn't worked for me.

My .travis.yml file:

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"

And I am getting an error:

> 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

Any idea how to solve this?

nrofis
  • 8,975
  • 14
  • 58
  • 113

2 Answers2

1

I think that you need to update tools after platform-tools due to codependencies like this:

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

Try this simplified version of my related answer, if you install it via sdkmanager, it works, see 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/*
Community
  • 1
  • 1
albodelu
  • 7,931
  • 7
  • 41
  • 84
1

The simplest solution that worked for me was to copy the SDK licenses to my project from SDK and then tell Travis to copy them to itself while building.

There's already a closed issue for this on Travis's Github page and one of the mentioned solutions on it is definitely working currently.

Solution

  1. Copy the licenses folder found in Android SDK's root directory.
  2. Paste it in the root directory of your own project on the same hierarchy where .travis.yml file is.
  3. Add these commands to your .travis.yml's before_install block:

.travis.yml:

before_install:
- mkdir "$ANDROID_HOME/licenses" || true
- cp ./licenses/* "$ANDROID_HOME/licenses/"

Exact link to solution: https://github.com/travis-ci/travis-ci/issues/6617#issuecomment-369580270

Link to my original answer on another SO question: https://stackoverflow.com/a/49050480/1402616

MiaN KhaLiD
  • 1,478
  • 1
  • 16
  • 28