NDK, CMake и Android в TravisCI
Я пытаюсь настроить свой CI для проекта Android, который использует некоторый код C++. Поэтому мне нужен NDK, который не поставляется предварительно установленным на изображениях Travis Android. В настоящее время я достигаю этого, вытаскивая NDK самостоятельно, однако моя коробка CI жалуется на то, что лицензия CMake не была принята. Странно то, что я думал, что это было включено в android-sdk-license, которую я уже включил в мою сборку. Мой Трэвис 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)
Ошибка лицензии видна внизу сборки здесь
3 ответа
В настоящее время это работает для меня:
install:
- echo y | sdkmanager 'ndk-bundle'
- echo y | sdkmanager 'cmake;3.6.4111459'
- echo y | sdkmanager 'lldb;3.0'
Мой.travis.yml доступен здесь.
Похоже, что в примерах NDK используется travis, может быть, посмотрите, чего не хватает в вашей сборке: https://github.com/googlesamples/android-ndk/blob/master/.travis.yml
Я не пробовал, но, возможно, это похоже на проблему, связанную с библиотекой ограничений.
Как объясняется здесь и здесь, используйте обходной путь для решения проблем с лицензией или загрузите его напрямую:
Есть ли решение без обходного пути с использованием экспортной лицензии?
Да, вы можете использовать новый 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
как здесь и здесь, 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
В этом случае, как объясняется здесь, вам необходимо принять лицензию в первый раз с помощью обходного пути:
В вашем
.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 вы можете принять все лицензии одновременно, как показано ниже:
# 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.
- '.+'
Я думаю, что если вы удалите раздел лицензий, "белый список всех лицензий" - '.+'
применяется по умолчанию.