22

我正在尝试让 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'
}

我在 Travis 上遇到的错误是:

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用 Travis 构建吗?

4

6 回答 6

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-.+
  - '.+'
于 2016-10-20T02:24:06.030 回答
13

build.gradle正试图拉进来com.android.support.constraint:constraint-layout:1.0.0-alpha2。我的 SDK 管理器只提供给我1.0.0-alpha1(Android 支持存储库的第 32 版)。也许 Travis CI 也只有1.0.0-alpha1这样。

由于我假设您1.0.0-alpha2正在使用您的开发机器,所以我不太确定这里发生了什么。Android Support Repository 的分发包中可能存在故障或其他问题。

于 2016-06-03T13:36:20.300 回答
7

有一个未解决的问题https://code.google.com/p/android/issues/detail?id=212128

简而言之,com.android.support.constraint:constraint-layout:1.0.0-alpha1它被捆绑到 Google 存储库中,但1.0.0-alpha2更高版本只能从 gradle 插件中获得,该插件需要放置许可证文本$HOME/.android/license/(如果找不到,请尝试$ANDROID_HOME/licenses)。

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

于 2016-06-15T08:05:50.280 回答
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...

于 2016-10-06T13:38:43.117 回答
1

如果您直接接受许可证,则不再需要接受许可证的解决方法,如此处所述:

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

使用 Android API 级别 22 到 25 的约束布局代码实验室存储库的完整工作示例。

于 2017-04-11T08:41:34.433 回答
0

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

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

Travis 的 Github 页面上已经有一个已解决的问题,其中提到的解决方案之一目前肯定正在运行。

解决方案

  1. 复制licensesAndroid SDK 根目录中的文件夹。
  2. 将其粘贴到您自己项目的根目录中,与.travis.yml文件所在的层次结构相同。
  3. 将这些命令添加到您.travis.ymlbefore_install块中:

.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

于 2018-03-01T13:21:39.510 回答