【问题标题】:NDK, CMake, and Android in TravisCITravisCI 中的 NDK、CMake 和 Android
【发布时间】:2017-12-12 22:09:27
【问题描述】:

我正在尝试为使用一些 C++ 代码的 Android 项目设置我的 CI。因此,我需要未预装在 Travis Android 图像上的 NDK。我目前通过自己拉 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)

在构建here底部可以看到许可错误

【问题讨论】:

  • 可能值得提交一个针对 Android Studio 的错误。他们正在努力减少 Android 构建工具对 CI 的痛苦,因此这应该引起一些关注。
  • 这和Android Studio有什么关系?这不是 IDE 问题。
  • Android Studio 团队拥有 SDK 管理器和随附的 CMake。

标签: android cmake android-ndk travis-ci


【解决方案1】:

这目前对我有用:

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

我的 .travis.yml 可用here

【讨论】:

  • 如果你使用的是cmake 3.10.2版本,将第二行和第三行改为- echo y | sdkmanager --channel=3 --channel=1 "cmake;3.10.2.4988404" - echo y | sdkmanager "lldb;3.1"
【解决方案2】:

看起来 NDK 示例使用了 travis,也许可以看看那里,看看你的构建中缺少什么:https://github.com/googlesamples/android-ndk/blob/master/.travis.yml

【讨论】:

    【解决方案3】:

    我没有尝试过,但可能类似于约束库相关问题。

    herehere 所述,使用变通方法解决许可证问题或直接下载:

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

    是的,您可以使用新的sdkmanagerinstall the constraint library and accept the license

      - 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 的正确版本,例如 hereherecmake;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
    

    在这种情况下,如here 所述,您需要通过解决方法第一次接受许可:

    在您的.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 对象上的所有许可证:

    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.
        - '.+'
    

    我认为如果您删除许可证部分,默认情况下会应用“所有许可证白名单”- '.+'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-28
      • 2016-10-13
      • 2017-09-16
      • 2013-04-17
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多