Travis CI build不适用于Android Constraint Layout

时间:2016-06-03 13:13:33

标签: android travis-ci android-constraintlayout

我正在尝试让Travis构建我的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

知道怎么解决这个问题吗?甚至可以用Travis构建ConstraintLayout吗?

6 个答案:

答案 0 :(得分:18)

在新版本的支持库版本 25.0.0 之后,约束布局 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-.+
  - '.+'

答案 1 :(得分:13)

您的build.gradle正试图加入com.android.support.constraint:constraint-layout:1.0.0-alpha2。我的SDK Manager仅向我提供1.0.0-alpha1(Android支持存储库的第32版)。也许特拉维斯CI也只有1.0.0-alpha1

由于我假设您1.0.0-alpha2正在使用您的开发机器,我不太确定这里发生了什么。 Android支持存储库的分发包装中可能存在小问题。

答案 2 :(得分:7)

有一个未解决的问题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)。

您可以将许可文本文件从本地计算机(在同意Android Studio 2.2提供的SDK Manager许可之后)复制到CI服务器,如问题中所述。或者降级到1.0.0-alpha1以解决问题。

答案 3 :(得分:1)

我对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 ...

答案 4 :(得分:1)

如果您直接接受,则不再需要解释here解释的许可证:

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

Full working sample using constraint-layout codelab repository for Android API level 22 to 25.

答案 5 :(得分:0)

可悲的是,添加许可证哈希不再适用。

对我来说最简单的解决方案(2018年)是将SDK许可证从SDK复制到我的项目中,然后告诉Travis在构建时将它们复制到自己。

在特拉维斯的Github页面上已经有一个封闭的问题,其中一个提到的解决方案肯定在当前工作。

<强>解决方案

  1. 复制Android SDK根目录中的licenses文件夹。
  2. 将其粘贴到.travis.yml文件所在的同一层次结构中您自己项目的根目录中。
  3. 将这些命令添加到.travis.yml before_install区块:
  4. <强> .travis.yml

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

    解决方案的完全链接:https://github.com/travis-ci/travis-ci/issues/6617#issuecomment-369580270

    在另一个SO问题上链接到我的原始答案:https://stackoverflow.com/a/49050480/1402616