问题
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?
回答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/*
回答2:
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
- Copy the
licenses
folder found in Android SDK's root directory. - Paste it in the root directory of your own project on the same hierarchy where
.travis.yml
file is. - Add these commands to your
.travis.yml
'sbefore_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
来源:https://stackoverflow.com/questions/43090804/travis-ci-build-doesnt-find-android-constraint-layout