CircleCI Android约束布局不起作用。

10

我现在正在为我的项目使用CircleCI,并且正在实现新的constraintLayout。 现在我遇到了CircleCI构建方面的问题。 当gradle -dependencies运行时,它会向我展示以下内容:

File /home/ubuntu/.android/repositories.cfg could not be loaded.
FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> You have not accepted the license agreements of the following SDK components:
  [com.android.support.constraint:constraint-layout:1.0.0-alpha3, com.android.support.constraint:constraint-layout-solver:1.0.0-alpha3].
  Before building your project, you need to accept the license agreements and complete the installation of the missing components using the Android Studio SDK Manager.
  Alternatively, to learn how to transfer the license agreements from one workstation to another, go to http://d.android.com/r/studio-ui/export-licenses.html

这是我的 .yml 配置文件:

#Install android build tools, platforms
#Supported versions here https://circleci.com/docs/android
machine:
    java:
        version: openjdk8
    environment:
        ANDROID_HOME: /usr/local/android-sdk-linux

dependencies:
    pre:
        - echo y | android list sdk
        - echo y | android update sdk --no-ui --all --filter "tools"
        - echo y | android update sdk --no-ui --all --filter "platform-tools"
        - echo y | android update sdk --no-ui --all --filter "build-tools-24.0.0"
        - echo y | android update sdk --no-ui --all --filter "android-24"
        - echo y | android update sdk --no-ui --all --filter "extra-google-m2repository"
        - echo y | android update sdk --no-ui --all --filter "extra-google-google_play_services"
        - echo y | android update sdk --no-ui --all --filter "extra-android-support"
        - echo y | android update sdk --no-ui --all --filter "extra-android-m2repository"
        - (./gradlew -version):
                    timeout: 360
    override:
        #- ANDROID_HOME=/usr/local/android-sdk-linux ./gradlew dependencies
        - export TERM="dumb"; if [ -e ./gradlew ]; then ./gradlew clean dependencies -stacktrace;else gradle clean dependencies -stacktrace;fi

#Pull any submodules
checkout:
  post:
    - git submodule init
    - git submodule update

#-PdisablePreDex is a must else gradle just dies due to memory limit
#Replace
test:
    override:
        - (./gradlew assemble -PdisablePreDex):
            timeout: 360
        - cp -r ${HOME}/${CIRCLE_PROJECT_REPONAME}/app/build/outputs/apk/ $CIRCLE_ARTIFACTS
        - emulator -avd circleci-android22 -no-audio -no-window:
            background: true
            parallel: true
        # wait for it to have booted
        - circle-android wait-for-boot
        # run tests  against the emulator.
        - ./gradlew connectedAndroidTest

#Deploy when tests pass
deployment:
    #production:
    #    branch: master
    #    commands:
    #        - (./gradlew clean assembleRelease crashlyticsUploadDistributionRelease -PdisablePreFex):
    #            timeout: 720

    staging:
        branch: staging
        commands:
             - (./gradlew clean assembleStaging crashlyticsUploadDistributionStaging -PdisablePreFex):
                timeout: 720

当我查看构建日志时,

echo y | android update sdk --no-ui --all --filter "extra-android-m2repository"

命令已执行,以下是结果:

November 20, 2015
Do you accept the license 'android-sdk-license-c81a61d9' [y/n]: 
Installing Archives:
  Preparing to install archives
  Downloading Android Support Repository, revision 33
  Installing Android Support Repository, revision 33
    Installed Android Support Repository, revision 33
  Done. 1 package installed.

我的类路径是:

classpath 'com.android.tools.build:gradle:2.2.0-alpha4'

我不确定我到底做错了什么,还是需要添加更多的内容。请给予建议。谢谢。

4个回答

3

Alex Fu的回答很好地解释了问题所在以及如何处理它,但有一个更简单的解决方案。由于许可证文件实际上只是一堆十六进制字符的简单文件,因此您可以简单地创建它们而不需要复制它们。例如,将以下代码放入

部分:

- ANDROID_HOME=/usr/local/android-sdk-linux
- mkdir "$ANDROID_HOME/licenses" || true
- echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license"
- echo "84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
- echo "d975f751698a77b662f1254ddbeed3901e976f5a" > "$ANDROID_HOME/licenses/intel-android-extra-license"

2

这种方式适用于我,而且首先检查缓存版本:

依赖项:
  pre:
    #Android SDK平台24
    - 如果[!-d“/usr/local/android-sdk-linux/platforms/android-24”]; then echo y | android update sdk --no-ui --all --filter“android-24”; fi
    #Android SDK构建工具,版本号24.0.1
    - 如果[!-d“/usr/local/android-sdk-linux/build-tools/24.0.1”]; then echo y | android update sdk --no-ui --all --filter“build-tools-24.0.1”; fi
    #Android支持库,版本号35 / 本地Maven仓库的支持库
    - 如果[!-d“/usr/local/android-sdk-linux/extras/android/m2repository/com/android/support/design/24.1.0”]; then echo y | android update sdk --no-ui --all --filter“extra-android-m2repository”; fi
cache_directories: - /usr/local/android-sdk-linux/platforms/android-24 - /usr/local/android-sdk-linux/build-tools/24.0.1 - /usr/local/android-sdk-linux/extras/android/m2repository

来自 CircleCI 员工 drazisil此帖子


2

简述

您需要将$ANDROID_HOME/licenses中的许可证复制到CircleCI环境中。

您可以将您的许可证打包并存储在Dropbox(或类似服务)中,并修改您的circle.yml文件以下载许可证并提取到$ANDROID_HOME中。

错误的最后一段已经基本解释了问题所在。

在构建项目之前,您需要接受许可协议并通过Android Studio SDK Manager安装缺少的组件。或者,您可以转移许可证协议从一个工作站到另一个工作站,方法请参阅http://d.android.com/r/studio-ui/export-licenses.html


3
谢谢,我终于找到了将许可证导出到CI的方法,只需要在依赖项中添加以下内容即可:
  • cp -r ${HOME}/${CIRCLE_PROJECT_REPONAME}/android-sdk-license $ANDROID_HOME
  • cp -r ${HOME}/${CIRCLE_PROJECT_REPONAME}/android-sdk-preview-license $ANDROID_HOME
同时,我将android-sdk-license和android-sdk-preview-license放到了我的存储库中。
- Jutikorn
1
这是一个很好的提示!但我建议将 android-sdk-licenseandroid-sdk-preview-license 的内容分别作为两个 Circle CI 环境变量,因为环境变量是受保护的,而这在您的版本控制存储库中并不一定成立。 - dbm
@Jutikorn,我在哪里可以下载它?我只找到了“android-sdk-license”。 - Spurdow

2

我遇到了与 ConstraintLayout 相同的问题,这是我的工作配置 circle.yml


我正在使用你们的 .yml 文件,但仍然存在相同的问题。 - N Kaushik
终于成功了。我复制了许可证文件夹,然后它就运行起来了 :) - N Kaushik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接