在TravisCI中使用NDK、CMake和Android

6

我正在尝试为使用了一些C++代码的Android项目设置CI。因此,我需要NDK,但Travis Android映像中没有预安装。我目前通过自己拉取NDK来实现这一点,但我的CI框正在抱怨未接受CMake许可证。奇怪的是,我认为这已经包含在android-sdk-license中,而我已经将其包含在我的构建中。我的travis YAML如下:

language: android

jdk:
  - oraclejdk8
  - oraclejdk9

android:
  components:
    - tools
    - platform-tools
    - tools
    - build-tools-26.0.2
    - android-26
    - extra-android-m2repository
    - extra-google-m2repository
    - extra-android-support
    - extra-google-google_play_services
    - add-on
    - extra

licenses:
  - 'android-sdk-preview-license-.+'
  - 'android-sdk-license-.+'

before_script:
  - wget https://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip
  - unzip -qq android-ndk-r16b-linux-x86_64.zip
  - export ANDROID_NDK_HOME=`pwd`/android-ndk-r16b
  - export LOCAL_ANDROID_NDK_HOME="$ANDROID_NDK_HOME"
  - export LOCAL_ANDROID_NDK_HOST_PLATFORM="linux-x86_64"
  - export PATH=$PATH:${ANDROID_NDK_HOME}
  - env

script: ./gradlew build jacocoTestReport

matrix:
  fast_finish: true
  allow_failures:
    - jdk: oraclejdk9

notifications:
  email: false

after_success:
   bash <(curl -s https://codecov.io/bash)

许可证错误可以在构建底部看到,此处


值得考虑向Android Studio提交错误报告。他们正在努力使Android构建工具在CI方面更加顺畅,因此这应该会引起一些关注。 - Dan Albert
这与Android Studio有什么关系?这不是一个IDE问题。 - jhole89
Android Studio团队拥有SDK管理器和随其一起提供的CMake。 - Dan Albert
3个回答

3

这个对我目前起作用:

install:
  - echo y | sdkmanager 'ndk-bundle'
  - echo y | sdkmanager 'cmake;3.6.4111459'
  - echo y | sdkmanager 'lldb;3.0'

My .travis.yml is available here.


将第二行和第三行改为 - echo y | sdkmanager --channel=3 --channel=1 "cmake;3.10.2.4988404",如果您使用的是 CMake 版本 3.10.2,则改为 - echo y | sdkmanager "lldb;3.1" - Ahmed Hegazy

1

0

我没有尝试过,但也许它与约束库相关的问题类似。

此处此处所解释的那样,使用解决许可问题的解决方法或直接下载:

有没有不使用导出许可证的解决方案?

是的,您可以使用新的sdkmanager安装约束库并接受许可证

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

在您的情况下,请检查正确的版本,例如这里这里cmake;3.6.4111459
  - sdkmanager --list || true

  - echo yes | sdkmanager "cmake;3.6.4111459"

否则,gradle 将检测到缺失的组件并在未经确认的情况下下载它:
  # Show version and download Gradle Wrapper if it's not already cached
  - ./gradlew --version
  # Clean project and download missing dependencies and components
  - ./gradlew clean build

在这种情况下,如此处所解释的那样,您需要通过解决方法第一次接受许可证:

In your .travis.yml file add:

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"

Do not forgot to accept all the licences on the main android object:

android:
  components:
    # ...
  licenses:
    - android-sdk-license-.+
    - '.+'

在 Android 脚本停用之前,您可以像this一样同时接受所有许可证:

# THE SETUP STAGE
# ---------------
# If you comment out this section, Travis CI will install for you the components you define here.
# Check your project requirements and the components included by default on Travis-ci VM images.
# Check required: https://github.com/google/iosched/blob/master/doc/BUILDING.md
# Check defaults: http://docs.travis-ci.com/user/languages/android/#Pre-installed-components

android:
  components:
    # Check Android SDK tools: http://developer.android.com/tools/sdk/tools-notes.html
    # Check Android SDK Platform-tools: http://developer.android.com/tools/revisions/platforms.html
    # Comment the lines below if the latest revisions of Android SDK Tools are included by default.
    # - tools
    # - platform-tools
    # ...
  licenses:
    # Check licenses: http://docs.travis-ci.com/user/languages/android/#Dealing-with-Licenses
    # By default Travis will accept all the licenses, but it's also possible to define a white list:
    # White list current android-sdk-license revision.
    # - 'android-sdk-license-5be876d5'
    # White list all android-sdk-license revisions.
    # - 'android-sdk-license-.+'
    # White list all the licenses.
    - '.+'

我认为如果您删除许可证部分,“白名单所有许可证” -'.+' 将自动应用。


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