Travis CI build no funciona con el diseño de restricciones de Android
travis-ci android-constraintlayout (6)
Estoy tratando de hacer que Travis construya mi proyecto de Android. Falla cuando intenta descargar la biblioteca para ConstraintLayout
. ¿Sabes lo que tengo que hacer para que funcione?
Mi .travis.yml
es este:
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
Mi build.gradle
es:
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''
}
Y el error que recibo en Travis es:
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
¿Algúna idea de cómo arreglar esto? ¿Es incluso posible construir ConstraintLayout
con Travis?
Después de la nueva versión de la biblioteca de soporte, versión 25.0.0 , la biblioteca Alpha1 de diseño de restricciones aparentemente ya no funciona en TravisCI. Usar esa versión era la única solución por el momento.
Ahora encontré una nueva solución para usar la nueva versión Alpha9 . En su archivo .travis.yml
agregue:
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"
No olvide aceptar todas las licencias en el objeto principal de android
:
licenses:
- android-sdk-license-.+
- ''.+''
Hay un problema abierto https://code.google.com/p/android/issues/detail?id=212128
En resumen, com.android.support.constraint:constraint-layout:1.0.0-alpha1
se incluye en el repositorio de Google, pero 1.0.0-alpha2
y la versión posterior solo están disponibles desde el plugin gradle que espera que se coloque un texto de licencia en $HOME/.android/license/
(si no lo encuentra, intente $ANDROID_HOME/licenses
).
Puede copiar el archivo de texto de licencia de su máquina local (después de haber aceptado la licencia de SDK Manager proporcionada por Android Studio 2.2) en el servidor de CI como se menciona en el problema. O baja a 1.0.0-alpha1
para solucionar el problema.
La solución para aceptar la licencia ya no es necesaria como se explica here si la acepta directamente:
- 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"
Lamentablemente, agregar hashes de licencia ya no funciona.
La solución más sencilla que me funcionó (en 2018) fue copiar las licencias de SDK a mi proyecto desde SDK y luego decirle a Travis que las copie a sí mismo mientras construye.
Ya existe un problema cerrado para esto en la página de Github de Travis y una de las soluciones mencionadas está funcionando actualmente.
Solución
- Copie la carpeta de
licenses
encuentra en el directorio raíz de Android SDK. - Péguelo en el directorio raíz de su propio proyecto en la misma jerarquía donde se
.travis.yml
archivo.travis.yml
. - Agregue estos comandos al bloque
before_install
subefore_install
:
.travis.yml :
before_install:
- mkdir "$ANDROID_HOME/licenses" || true
- cp ./licenses/* "$ANDROID_HOME/licenses/"
Enlace exacto a la solución: https://github.com/travis-ci/travis-ci/issues/6617#issuecomment-369580270
Enlace a mi respuesta original en otra pregunta SO: https://.com/a/49050480/1402616
Su build.gradle
está intentando extraer com.android.support.constraint:constraint-layout:1.0.0-alpha2
. My SDK Manager solo me ofrece 1.0.0-alpha1
(Rev 32 del repositorio de soporte de Android). Quizás Travis CI también solo tiene 1.0.0-alpha1
también.
Como supongo que tiene 1.0.0-alpha2
trabajando en su máquina de desarrollo, no estoy muy seguro de lo que está pasando aquí. Puede haber una falla en el paquete de distribución del repositorio de soporte de Android o algo así.
Tengo el mismo problema con com.android.support.constraint:constraint-layout:1.0.0-alpha9
. En mi caso, traté directamente de crear el archivo de licencia en Travis de esta manera:
before_install:
- mkdir "$ANDROID_SDK/licenses" || true
- echo -e "/n8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_SDK/licenses/android-sdk-license"
Pero como no tengo permisos para escribir en $ANDROID_SDK
y no hay soporte para sudo
, no tengo idea de qué hacer a continuación.
La única opción que veo es esperar hasta que Google la incluya en la licencia o descienda a alpha1
...