CircleCI找不到com.android.support.constraint:constraint-layout:1.0.0-alpha3

时间:2016-07-14 18:24:26

标签: android circleci android-constraintlayout

我已经尝试了很长时间让ConstraintLayout与CircleCI一起使用。 以前它告诉我,我还没有接受SDK许可证,因此我将Android SDK许可证导出到CircleCI。 (线程已创建here)现在我面临另一个错误,它说:

    export TERM="dumb"; if [ -e ./gradlew ]; then ./gradlew clean dependencies -stacktrace;else gradle clean dependencies -stacktrace;fi
Starting a new Gradle Daemon for this build (subsequent builds will be faster).
Parallel execution is an incubating feature.

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> Could not resolve all dependencies for configuration ':app:_debugApkCopy'.
   > Could not find com.android.support.constraint:constraint-layout:1.0.0-alpha3.
     Required by:
         myproject-android:app:unspecified
* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':app'.
    at org.gradle.configuration.project.LifecycleProjectEvaluator.addConfigurationFailure(LifecycleProjectEvaluator.java:79)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:74)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:61)
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:510)
    at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:90)
    at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:47)
    at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35)
    at org.gradle.initialization.DefaultGradleLauncher$2.run(DefaultGradleLauncher.java:125)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:122)
    at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
    at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
    at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
    at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
    at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:48)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:52)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.DaemonHealthTracker.execute(DaemonHealthTracker.java:47)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:66)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:72)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.health.HintGCAfterBuild.execute(HintGCAfterBuild.java:41)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:120)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:246)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
    at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
Caused by: org.gradle.api.artifacts.ResolveException: Could not resolve all dependencies for configuration ':app:_debugApkCopy'.
    at org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration.rethrowFailure(DefaultLenientConfiguration.java:62)
    at org.gradle.api.internal.artifacts.ivyservice.DefaultResolvedConfiguration.rethrowFailure(DefaultResolvedConfiguration.java:36)
    at org.gradle.api.internal.artifacts.ivyservice.DefaultResolvedConfiguration.getResolvedArtifacts(DefaultResolvedConfiguration.java:59)
    at org.gradle.api.internal.artifacts.ivyservice.SelfResolvingDependencyConfigurationResolver$FilesAggregatingResolvedConfiguration.getResolvedArtifacts(SelfResolvingDependencyConfigurationResolver.java:92)
    at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver$ErrorHandlingResolvedConfiguration.getResolvedArtifacts(ErrorHandlingConfigurationResolver.java:221)
    at com.android.build.gradle.internal.DependencyManager.collectArtifacts(DependencyManager.java:528)
    at com.android.build.gradle.internal.DependencyManager.gatherDependencies(DependencyManager.java:349)
    at com.android.build.gradle.internal.DependencyManager.resolveDependencyForConfig(DependencyManager.java:268)
    at com.android.build.gradle.internal.DependencyManager.resolveDependencies(DependencyManager.java:155)
    at com.android.build.gradle.internal.TaskManager.resolveDependencies(TaskManager.java:357)
    at com.android.build.gradle.internal.VariantManager$9.call(VariantManager.java:630)
    at com.android.build.gradle.internal.VariantManager$9.call(VariantManager.java:627)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
    at com.android.build.gradle.internal.profile.SpanRecorders.record(SpanRecorders.java:51)
    at com.android.build.gradle.internal.VariantManager.createVariantData(VariantManager.java:626)
    at com.android.build.gradle.internal.VariantManager.createVariantDataForProductFlavors(VariantManager.java:817)
    at com.android.build.gradle.internal.VariantManager.populateVariantDataList(VariantManager.java:491)
    at com.android.build.gradle.internal.VariantManager$1.call(VariantManager.java:268)
    at com.android.build.gradle.internal.VariantManager$1.call(VariantManager.java:265)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
    at com.android.build.gradle.internal.VariantManager.createAndroidTasks(VariantManager.java:264)
    at com.android.build.gradle.BasePlugin$11.call(BasePlugin.java:695)
    at com.android.build.gradle.BasePlugin$11.call(BasePlugin.java:692)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
    at com.android.build.gradle.BasePlugin.createAndroidTasks(BasePlugin.java:691)
    at com.android.build.gradle.BasePlugin$10.call(BasePlugin.java:617)
    at com.android.build.gradle.BasePlugin$10.call(BasePlugin.java:614)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:55)
    at com.android.builder.profile.ThreadRecorder$1.record(ThreadRecorder.java:47)
    at com.android.build.gradle.BasePlugin.lambda$createTasks$1(BasePlugin.java:613)
    at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:93)
    at org.gradle.internal.event.BroadcastDispatch$ActionInvocationHandler.dispatch(BroadcastDispatch.java:82)
    at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:44)
    at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:79)
    at org.gradle.internal.event.BroadcastDispatch.dispatch(BroadcastDispatch.java:30)
    at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
    at com.sun.proxy.$Proxy11.afterEvaluate(Unknown Source)
    at org.gradle.configuration.project.LifecycleProjectEvaluator.notifyAfterEvaluate(LifecycleProjectEvaluator.java:67)
    ... 52 more
Caused by: org.gradle.internal.resolve.ModuleVersionNotFoundException: Could not find com.android.support.constraint:constraint-layout:1.0.0-alpha3.
Required by:
    myproject-android:app:unspecified
    at org.gradle.internal.resolve.result.DefaultBuildableComponentResolveResult.notFound(DefaultBuildableComponentResolveResult.java:38)
    at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.RepositoryChainComponentMetaDataResolver.resolveModule(RepositoryChainComponentMetaDataResolver.java:88)
    at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.RepositoryChainComponentMetaDataResolver.resolve(RepositoryChainComponentMetaDataResolver.java:59)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.ComponentResolversChain$ComponentMetaDataResolverChain.resolve(ComponentResolversChain.java:80)
    at org.gradle.api.internal.artifacts.ivyservice.clientmodule.ClientModuleResolver.resolve(ClientModuleResolver.java:44)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder$ModuleVersionResolveState.resolve(DependencyGraphBuilder.java:560)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder$ModuleVersionResolveState.getMetaData(DependencyGraphBuilder.java:570)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder$DependencyEdge.calculateTargetConfigurations(DependencyGraphBuilder.java:256)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder$DependencyEdge.attachToTargetConfigurations(DependencyGraphBuilder.java:230)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder.traverseGraph(DependencyGraphBuilder.java:137)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder.resolve(DependencyGraphBuilder.java:75)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver$1.execute(DefaultArtifactDependencyResolver.java:88)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver$1.execute(DefaultArtifactDependencyResolver.java:78)
    at org.gradle.internal.Transformers$4.transform(Transformers.java:137)
    at org.gradle.api.internal.artifacts.ivyservice.DefaultIvyContextManager.withIvy(DefaultIvyContextManager.java:61)
    at org.gradle.api.internal.artifacts.ivyservice.DefaultIvyContextManager.withIvy(DefaultIvyContextManager.java:39)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultArtifactDependencyResolver.resolve(DefaultArtifactDependencyResolver.java:78)
    at org.gradle.api.internal.artifacts.ivyservice.CacheLockingArtifactDependencyResolver$1.run(CacheLockingArtifactDependencyResolver.java:41)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:192)
    at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:175)
    at org.gradle.cache.internal.DefaultPersistentDirectoryStore.useCache(DefaultPersistentDirectoryStore.java:106)
    at org.gradle.cache.internal.DefaultCacheFactory$ReferenceTrackingCache.useCache(DefaultCacheFactory.java:187)
    at org.gradle.api.internal.artifacts.ivyservice.DefaultCacheLockingManager.useCache(DefaultCacheLockingManager.java:64)
    at org.gradle.api.internal.artifacts.ivyservice.CacheLockingArtifactDependencyResolver.resolve(CacheLockingArtifactDependencyResolver.java:39)
    at org.gradle.api.internal.artifacts.ivyservice.DefaultConfigurationResolver.resolve(DefaultConfigurationResolver.java:91)
    at org.gradle.api.internal.artifacts.ivyservice.SelfResolvingDependencyConfigurationResolver.resolve(SelfResolvingDependencyConfigurationResolver.java:40)
    at org.gradle.api.internal.artifacts.ivyservice.ShortCircuitEmptyConfigurationResolver.resolve(ShortCircuitEmptyConfigurationResolver.java:52)
    at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingConfigurationResolver.resolve(ErrorHandlingConfigurationResolver.java:43)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveGraphIfRequired(DefaultConfiguration.java:367)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveNow(DefaultConfiguration.java:342)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.getResolvedConfiguration(DefaultConfiguration.java:335)
    at com.android.build.gradle.internal.DependencyManager.collectArtifacts(DependencyManager.java:527)
    ... 87 more


BUILD FAILED

Total time: 27.156 secs

export TERM="dumb"; if [ -e ./gradlew ]; then ./gradlew clean dependencies -stacktrace;else gradle clean dependencies -stacktrace;fi returned exit code 1

Action failed: export TERM="dumb"; if [ -e ./gradlew ]; then ./gradlew clean dependencies -stacktrace;else gradle clean dependencies -stacktrace;fi

我很困惑所以我通过在依赖项中运行此命令打印出 m2repository 中的所有文件:pre:

ls -l ${ANDROID_HOME}/extras/android/m2repository/com/android/support

约束文件夹会立即显示在我身上:

ls -l ${ANDROID_HOME}/extras/android/m2repository/com/android/support
total 0
drwxrwxr-x 1 ubuntu ubuntu 262 Jul 14 18:11 animated-vector-drawable
drwxrwxr-x 1 ubuntu ubuntu 466 Jul 14 18:11 appcompat-v7
drwxrwxr-x 1 ubuntu ubuntu 406 Jul 14 18:11 cardview-v7
drwxrwxr-x 1 ubuntu ubuntu  82 Jul 14 18:11 constraint
drwxrwxr-x 1 ubuntu ubuntu 310 Jul 14 18:11 customtabs
drwxrwxr-x 1 ubuntu ubuntu 334 Jul 14 18:11 design
drwxrwxr-x 1 ubuntu ubuntu 478 Jul 14 18:11 gridlayout-v7
drwxrwxr-x 1 ubuntu ubuntu 406 Jul 14 18:11 leanback-v17
drwxrwxr-x 1 ubuntu ubuntu 466 Jul 14 18:11 mediarouter-v7
drwxrwxr-x 1 ubuntu ubuntu 146 Jul 14 18:11 multidex
drwxrwxr-x 1 ubuntu ubuntu 146 Jul 14 18:11 multidex-instrumentation
drwxrwxr-x 1 ubuntu ubuntu 406 Jul 14 18:11 palette-v7
drwxrwxr-x 1 ubuntu ubuntu 322 Jul 14 18:11 percent
drwxrwxr-x 1 ubuntu ubuntu 310 Jul 14 18:11 preference-leanback-v17
drwxrwxr-x 1 ubuntu ubuntu 310 Jul 14 18:11 preference-v14
drwxrwxr-x 1 ubuntu ubuntu 310 Jul 14 18:11 preference-v7
drwxrwxr-x 1 ubuntu ubuntu 298 Jul 14 18:11 recommendation
drwxrwxr-x 1 ubuntu ubuntu 406 Jul 14 18:11 recyclerview-v7
drwxrwxr-x 1 ubuntu ubuntu 430 Jul 14 18:11 support-annotations
drwxrwxr-x 1 ubuntu ubuntu 478 Jul 14 18:11 support-v13
drwxrwxr-x 1 ubuntu ubuntu 478 Jul 14 18:11 support-v4
drwxrwxr-x 1 ubuntu ubuntu 262 Jul 14 18:11 support-vector-drawable
drwxrwxr-x 1 ubuntu ubuntu 196 Jul 14 18:11 test

以前有人遇到过这个问题吗?请帮忙。

有关详细信息,请参阅我的.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
        GRADLE_OPTS: '-Dorg.gradle.jvmargs="-Xmx4608m -XX:+HeapDumpOnOutOfMemoryError"'

dependencies:
    pre:
        - 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"
        - cp -r ${HOME}/${CIRCLE_PROJECT_REPONAME}/android-sdk-license $ANDROID_HOME
        - cp -r ${HOME}/${CIRCLE_PROJECT_REPONAME}/android-sdk-preview-license $ANDROID_HOME
        - cp -r ${HOME}/${CIRCLE_PROJECT_REPONAME}/repositories.cfg /home/ubuntu/.android/
        - ls -l ${ANDROID_HOME}/extras/android/m2repository/com/android/support

    override:
        - 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 -stacktrace):
            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:
   #release:
       #branch: master
       #commands:
       # -(./gradlew clean publishApkRelease -Dorg.gradle.project.track=alpha):
       #  timeout: 720
   staging:
       branch: staging
       commands:
        - (./gradlew clean assembleStaging crashlyticsUploadDistributionStaging -PdisablePreFex):
                timeout: 720

3 个答案:

答案 0 :(得分:1)

以下是我如何运作

  1. 我首先导入许可证,因此我不需要手动安装内容。不确定是否有必要,但这就是我做的方式。
  2. 安装约束布局失败但实际安装了所有需要的文件,因此我更改了circle.yml以忽略其失败状态:./gradlew dependencies || true
  3. 那就是它。
  4. 我的circle.yml看起来像这样

    dependencies:
      pre:
        - mkdir -p ${ANDROID_HOME}/licenses
        - echo $ANDROID_SDK_LICENSE > ${ANDROID_HOME}/licenses/android-sdk-license
      override:
        # we are cheating because there is a problem with constraint layout ATM
        # see: https://code.google.com/p/android/issues/detail?id=212128
        - ./gradlew dependencies || true
    
    test:
      override:
        - ./gradlew test --console=plain
        - ./gradlew lint --console=plain
    
        - cp -r app/build/outputs $CIRCLE_ARTIFACTS
        - cp -r app/build/test-results/* $CIRCLE_TEST_REPORTS
    

    我写了a small post了解详情。

答案 1 :(得分:1)

我对ConstraintLayout有同样的问题。基本上,您需要使用像./gradlew dependencies || true这样的解决方法。这是我的工作circle.yml配置

答案 2 :(得分:0)

我通过配置circle.yml

解决了这个问题
dependencies:
  pre:
    - git fetch origin # sometimes circleci fail to fetch branches correctly, so fetch them expressly
    - echo y | android -s update sdk -u -a -t "tools" # update Android SDK that includes sdkmanager(1)
    - mkdir -p $ANDROID_HOME/licenses
    - echo -e "8933bad161af4178b1185d1a37fbf41ea5269c55" > $ANDROID_HOME/licenses/android-sdk-license
    - echo -e "84831b9409646a918e30573bab4c9c91346d8abd" > $ANDROID_HOME/licenses/android-sdk-preview-license
    - $ANDROID_HOME/tools/bin/sdkmanager "platform-tools" "extras;android;m2repository" "extras;google;m2repository"
    - $ANDROID_HOME/tools/bin/sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.1"
    - $ANDROID_HOME/tools/bin/sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.1"
    - curl -fSL https://github.com/haya14busa/reviewdog/releases/download/$REVIEWDOG_VERSION/reviewdog_linux_amd64 -o reviewdog && chmod +x ./reviewdog
  override:
    - ./gradlew app:dependencies