web-dev-qa-db-fra.com

Travis CI build ne fonctionne pas avec Android Constraint Layout

J'essaie de faire que Travis construise mon projet Android. Il échoue lorsqu'il essaie de télécharger la bibliothèque pour ConstraintLayout. Savez-vous ce que je dois faire pour que cela fonctionne?

Mon .travis.yml est ceci:

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

Mon build.gradle est:

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'
}

Et l'erreur que j'ai sur Travis est la suivante:

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

Une idée comment résoudre ce problème? Est-il même possible de construire ConstraintLayout avec Travis?

22
Terry

Votre build.gradle tente d’obtenir com.Android.support.constraint:constraint-layout:1.0.0-alpha2. Mon SDK Manager ne m'offre que 1.0.0-alpha1 (Rev 32 du référentiel de support Android). Peut-être que Travis CI n’a également que 1.0.0-alpha1.

Puisque je présume que 1.0.0-alpha2 est en train de travailler sur votre machine de développement, je ne suis pas tout à fait sûr de ce qui se passe ici. Il pourrait y avoir un problème dans l'emballage de la distribution du référentiel de support Android ou quelque chose du genre.

13
CommonsWare

Après la nouvelle version de la bibliothèque de support 25.0.0 , la bibliothèque de Constraint Layout Alpha1 ne fonctionne apparemment plus avec TravisCI. Utiliser cette version était la seule solution de contournement pour le moment.

Maintenant, j'ai trouvé une nouvelle solution pour utiliser la nouvelle version Alpha9 . Dans votre fichier .travis.yml, ajoutez:

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"

N'oubliez pas d'accepter toutes les licences sur l'objet Android principal:

licenses:
  - Android-sdk-license-.+
  - '.+'
18
amouly

Il existe un problème en suspens https://code.google.com/p/Android/issues/detail?id=212128

En bref, com.Android.support.constraint:constraint-layout:1.0.0-alpha1 est intégré à Google Repository, mais 1.0.0-alpha2 et ses versions ultérieures sont uniquement disponibles à partir du plug-in gradle qui attend qu'un texte de licence soit placé dans $HOME/.Android/license/ (s'il est introuvable, essayez $Android_HOME/licenses). 

Vous pouvez copier le fichier texte de licence de votre ordinateur local (après avoir accepté la licence fournie par SDK Manager fournie par Android Studio 2.2) sur le serveur CI, comme indiqué dans le problème. Ou rétrograder à 1.0.0-alpha1 pour résoudre le problème.

7
kamikat

J'ai le même problème avec com.Android.support.constraint:constraint-layout:1.0.0-alpha9. Dans mon cas, j'ai directement essayé de créer le fichier de licence dans Travis de la manière suivante:

before_install:
  - mkdir "$Android_SDK/licenses" || true
  - echo -e "\n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$Android_SDK/licenses/Android-sdk-license"

Mais comme je n'ai pas l'autorisation d'écrire sur $Android_SDK et que Sudo n'est pas pris en charge, je ne sais pas du tout comment procéder.

La seule option que je vois est d'attendre que Google l'inclue dans la licence ou rétrograde à alpha1...

1
Gnzlt

La solution de contournement pour accepter la licence n’est plus nécessaire, comme expliqué précédemment ici si vous l’acceptez directement:

  - 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"

Exemple de travail complet utilisant le référentiel codelab de constraint-layout pour les API Android de niveau 22 à 25.

1
albodelu

Malheureusement, l'ajout de licences de hachage ne fonctionne plus.

La solution la plus simple qui a fonctionné pour moi (en 2018 ????) a été de copier les licences SDK de SDK vers mon projet, puis d'indiquer à Travis de les copier pendant la construction.

Il y a déjà un numéro fermé pour cela sur la page Github de Travis et l'une des solutions mentionnées actuellement est définitivement opérationnelle.

Solution

  1. Copiez le dossier licenses qui se trouve dans le répertoire racine du SDK Android.
  2. Collez-le dans le répertoire racine de votre propre projet dans la même hiérarchie que le fichier .travis.yml.
  3. Ajoutez ces commandes au bloc .travis.yml de votre before_install:

.travis.yml:

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

Lien exact vers la solution: https://github.com/travis-ci/travis-ci/issues/6617#issuecomment-369580270

Lien vers ma réponse initiale à une autre question SO: https://stackoverflow.com/a/49050480/1402616

0
MiaN KhaLiD