CircleCI Android constraintLayout不';行不通

CircleCI Android constraintLayout不';行不通,android,android-gradle-plugin,circleci,Android,Android Gradle Plugin,Circleci,我现在正在为我的项目使用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

我现在正在为我的项目使用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'
我不确定我做错了什么,或者还有什么需要补充的。请建议。 谢谢

TL;DR

您需要将许可证从
$ANDROID\u HOME/licenses
复制到CircleCI环境中

您可以压缩许可证并将其存储在Dropbox(或类似工具)上,然后修改
circle.yml
文件以下载许可证并将其解压缩到
$ANDROID\u HOME

错误的最后一段很好地解释了这一点

在构建项目之前,您需要接受许可协议,并使用Android Studio SDK管理器完成缺少组件的安装。或者,要了解如何将许可协议从一个工作站转移到另一个工作站,请转到


这对我来说很有效,而且还首先检查缓存版本:

dependencies: pre: # Android SDK Platform 24 - if [ ! -d "/usr/local/android-sdk-linux/platforms/android-24" ]; then echo y | android update sdk --no-ui --all --filter "android-24"; fi # Android SDK Build-tools, revision 24.0.1 - if [ ! -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 Support Repository, revision 35 / Local Maven repository for Support Libraries - if [ ! -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 依赖项: 之前: #Android SDK平台24 -如果[!-d”/usr/local/android sdk linux/platforms/android-24“];然后echo y | android更新sdk——无用户界面——全部——过滤“android-24”;fi #Android SDK构建工具,版本24.0.1 -如果[!-d”/usr/local/android sdk linux/build tools/24.0.1“];然后echo y | android更新sdk——无用户界面——全部——过滤“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“];然后echo y | android更新sdk——无ui——全部——过滤“extra-android-m2repository”;fi 缓存目录: -/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,我对ConstraintLayout有同样的问题,这是我的工作配置,Alex Fu的回答很好地解释了问题所在以及如何处理,但有一个更简单的解决方案。由于许可证文件实际上只是简单的文件,其中包含一组十六进制字符,因此您可以简单地创建它们,而无需任何复制。例如,将以下代码放入
pre:
部分:

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

谢谢,我终于找到了将许可证导出到CI的方法,方法是将这些依赖项添加到pre:-cp-r${HOME}/${CIRCLE\u PROJECT\u REPONAME}/android sdk许可证$android\u HOME-cp-r${HOME}/${CIRCLE\u PROJECT\u REPONAME}/android sdk预览许可证$android_HOME我还将android sdk许可证和android sdk预览许可证放在我的报告中这是一个很棒的提示!但我建议将
android sdk许可证
android sdk预览许可证
的内容作为两个单独的Circle CI环境变量,因为环境变量是受保护的,这对于您的VCS回购来说不一定是正确的。@Jutikorn我在哪里可以下载?我只找到了
android sdk许可证
我正在使用你的.yml文件,但仍然存在相同的问题。最后它成功了。我已经复制了licenses文件夹,它成功了:)