Сборка 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"

Полный рабочий пример с использованием репозитория Codelab с макетом ограничений для Android API уровня 22-25.

К сожалению, добавление лицензионных хэшей больше не работает.

Самое простое решение, которое сработало для меня (в 2018 году), - это скопировать лицензии SDK в мой проект из SDK, а затем попросить Трэвиса скопировать их себе при сборке.

На странице Travis's Github эта проблема уже закрыта, и одно из упомянутых решений уже работает.

Решение

  1. Скопируйте licenses папка найдена в корневом каталоге Android SDK.
  2. Вставьте его в корневой каталог вашего собственного проекта в той же иерархии, где .travis.yml файл есть.
  3. Добавьте эти команды к вашему .travis.yml"s before_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

Другие вопросы по тегам