Сборка Travis CI не работает с Android Constraint Layout
Я пытаюсь заставить Трэвиса построить мой проект Android. Не удается, когда он пытается загрузить библиотеку для ConstraintLayout
, Ты знаешь, что я должен сделать, чтобы это сработало?
мой .travis.yml
это:
language: android
jdk:
- oraclejdk8
android:
components:
- platform-tools
- tools
- build-tools-23.0.2
- android-23
- extra-android-support
- extra-android-m2repository
- extra-google-m2repository
мой build.gradle
является:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "my.example.bdd"
minSdkVersion 9
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha2'
testCompile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
androidTestCompile 'com.android.support.test:runner:0.5'
androidTestCompile 'com.android.support:support-annotations:23.4.0'
}
И ошибка, которую я получаю на Трэвисе:
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring project ':app'.
> Could not resolve all dependencies for configuration ':app:_debugApk'.
> Could not find com.android.support.constraint:constraint-layout:1.0.0-alpha2.
Searched in the following locations:
https://jcenter.bintray.com/com/android/support/constraint/constraint-layout/1.0.0-alpha2/constraint-layout-1.0.0-alpha2.pom
https://jcenter.bintray.com/com/android/support/constraint/constraint-layout/1.0.0-alpha2/constraint-layout-1.0.0-alpha2.jar
file:/usr/local/android-sdk/extras/android/m2repository/com/android/support/constraint/constraint-layout/1.0.0-alpha2/constraint-layout-1.0.0-alpha2.pom
file:/usr/local/android-sdk/extras/android/m2repository/com/android/support/constraint/constraint-layout/1.0.0-alpha2/constraint-layout-1.0.0-alpha2.jar
file:/usr/local/android-sdk/extras/google/m2repository/com/android/support/constraint/constraint-layout/1.0.0-alpha2/constraint-layout-1.0.0-alpha2.pom
file:/usr/local/android-sdk/extras/google/m2repository/com/android/support/constraint/constraint-layout/1.0.0-alpha2/constraint-layout-1.0.0-alpha2.jar
Есть идеи, как это исправить? Можно ли даже построить ConstraintLayout
с Трэвисом?
6 ответов
Ваш build.gradle
пытается втянуть com.android.support.constraint:constraint-layout:1.0.0-alpha2
, Мой SDK Manager только предлагает мне 1.0.0-alpha1
(Ред. 32 из репозитория поддержки Android). Возможно, Трэвис CI также имеет только 1.0.0-alpha1
также.
Так как я предполагаю, что у вас есть 1.0.0-alpha2
работая над своей машиной разработки, я не совсем уверен, что здесь происходит. В дистрибутиве хранилища поддержки Android может быть сбой или что-то в этом роде.
После выхода новой версии библиотеки поддержки 25.0.0 библиотека Constraint Layout Alpha1, очевидно, больше не работает в TravisCI. Использование этой версии было единственным обходным решением на данный момент.
Теперь я нашел новый обходной путь для использования новой версии Alpha9. В вашем .travis.yml
добавление файла:
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"
Не забудьте принять все лицензии на основной android
объект:
licenses:
- android-sdk-license-.+
- '.+'
Существует открытая проблема https://code.google.com/p/android/issues/detail?id=212128
Короче, com.android.support.constraint:constraint-layout:1.0.0-alpha1
входит в Google Repository, но 1.0.0-alpha2
и более поздняя версия доступна только из подключаемого модуля Gradle, который ожидает, что текст лицензии будет помещен в $HOME/.android/license/
(если не найдено, попробуйте $ANDROID_HOME/licenses
).
Вы можете скопировать текстовый файл лицензии с вашего локального компьютера (после согласования с лицензией из SDK Manager, предоставленной Android Studio 2.2) на сервер CI, как указано в проблеме. Или понизить до 1.0.0-alpha1
решить проблему.
У меня та же проблема с com.android.support.constraint:constraint-layout:1.0.0-alpha9
, В моем случае я напрямую пытался создать файл лицензии в Travis следующим образом:
before_install:
- mkdir "$ANDROID_SDK/licenses" || true
- echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"
Но так как у меня нет прав на запись $ANDROID_SDK
и нет поддержки sudo
Я понятия не имею, что делать дальше.
Единственный вариант, который я вижу, - это дождаться, пока Google включит его в лицензию, или перейти на alpha1
...
Обходной путь для принятия лицензии больше не требуется, как описано здесь, если вы принимаете это напрямую:
- 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"
К сожалению, добавление лицензионных хэшей больше не работает.
Самое простое решение, которое сработало для меня (в 2018 году), - это скопировать лицензии SDK в мой проект из SDK, а затем попросить Трэвиса скопировать их себе при сборке.
На странице Travis's Github эта проблема уже закрыта, и одно из упомянутых решений уже работает.
Решение
- Скопируйте
licenses
папка найдена в корневом каталоге Android SDK. - Вставьте его в корневой каталог вашего собственного проекта в той же иерархии, где
.travis.yml
файл есть. - Добавьте эти команды к вашему
.travis.yml
"sbefore_install
блок:
.travis.yml:
before_install:
- mkdir "$ANDROID_HOME/licenses" || true
- cp ./licenses/* "$ANDROID_HOME/licenses/"
Точная ссылка на решение: https://github.com/travis-ci/travis-ci/issues/6617
Ссылка на мой оригинальный ответ на другой вопрос SO: /questions/43100976/travis-ci-poterpel-neudachu-potomu-chto-ne-mozhet-prinyat-raspolozhenie-ogranichenij-litsenzii/43100996#43100996