【问题标题】:How to setup Travis CI for an Android Project which uses both NDK and SDK to build如何为使用 NDK 和 SDK 构建的 Android 项目设置 Travis CI
【发布时间】:2023-04-04 20:16:01
【问题描述】:

我已经搜索了很多地方,甚至在 Travis CI 文档页面中,但我找不到我的问题的解决方案。问题是 - 我已经在 Travis CI 上设置了一个运行良好的 Android 项目。现在,我有一些要求,我需要为我的项目编译一些本机文件。在我的本地机器上,设置完美运行,因为我已经安装了 SDKNDK。当我推送代码时,Travis 抱怨 NDK。因此,我寻找如何为 Travis 设置 NDK。我点击了以下链接---

https://github.com/googlesamples/android-ndk/blob/master/.travis.yml

Travis: how to know android sdk/ndk path?

https://github.com/travis-ci/travis-ci/issues/5395

但以上都没有奏效。我的travis.yml 文件在下面--

# which language/platform is used
language: android
# JDK version
jdk:
- oraclejdk8

# root permission required?
sudo: required
dist: precise

# Environment variables
env:
  global:
  - BRANCH_NAME=$TRAVIS_BRANCH

# android components required to build code
android:
  components:
  - tools
  - platform-tools
  - build-tools-25.0.3
  - android-24
  - extra-android-m2repository
  - extra-google-m2repository
  - extra-google-google_play_services

# clean up old stuff before we get started
before_cache:
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock

# cache directories to use
cache:
  directories:
  - "$HOME/.gradle/caches/"
  - "$HOME/.gradle/wrapper/"

# Configurations to set up Android NDK
before_install:
    - rm -fr $HOME/android-ndk-r16b
    - curl -L http://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip -O
    - unzip -oq android-ndk-r16b-linux-x86_64.zip
    - rm android-ndk-r16b-linux-x86_64.zip
    - export ANDROID_NDK_HOME=$HOME/android-ndk-r16b
    - export PATH=$PATH:${ANDROID_NDK_HOME}

# Build script - which configs and creates the builds
script: "./my_script.sh"

通过此设置,Travis CI 可以识别 NDK,但在运行我的构建脚本时却找不到它。下面是我的 Travis 构建的日志 --

android.install
Installing Android dependencies
creating directory /home/travis/.gradle/caches
adding /home/travis/.gradle/wrapper to cache
creating directory /home/travis/.gradle/wrapper
$ java -Xmx32m -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
$ javac -J-Xmx32m -version
javac 1.8.0_111
before_install.1
$ rm -fr $HOME/android-ndk-r16b
before_install.2
$ curl -L http://dl.google.com/android/repository/android-ndk-r16b-linux-x86_64.zip -O
before_install.3
$ unzip -oq android-ndk-r16b-linux-x86_64.zip
before_install.4
$ rm android-ndk-r16b-linux-x86_64.zip
before_install.5
$ export ANDROID_NDK_HOME=$HOME/android-ndk-r16b
before_install.6
$ export PATH=$PATH:${ANDROID_NDK_HOME}
$ ./build_cc_app.sh
To honour the JVM settings for this build a new JVM will be forked. Please consider using the daemon: https://docs.gradle.org/3.3/userguide/gradle_daemon.html.
Daemon will be stopped at the end of the build stopping after processing
Parallel execution with configuration on demand is an incubating feature.
NDK is missing a "platforms" directory.
If you are using NDK, verify the ndk.dir is set to a valid NDK directory.  It is currently set to /home/travis/android-ndk-r16b.
If you are not using NDK, unset the NDK variable from ANDROID_NDK_HOME or local.properties to remove this warning.
NDK is missing a "platforms" directory.
FAILURE: Build failed with an exception.
* What went wrong:
A problem occurred configuring project ':client'.
> NDK not configured. /home/travis/android-ndk-r16b
  Download it with SDK manager.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 29.479 secs

【问题讨论】:

    标签: android android-ndk travis-ci


    【解决方案1】:

    错误消息说它缺少platforms 目录。您可能可以通过请求在您的存储库上启用调试来进一步调查:

    Running build in debug

    此功能适用于私有存储库和公共存储库 启用该功能的存储库。拥有该功能 启用公共存储库,请发送电子邮件至 support@travis-ci.com 指出哪些。推送访问 存储库也是必需的。

    我发现 Travis 的响应速度非常快,但您还需要设置命令行客户端:

    Travis commandline client

    【讨论】:

    • 我在调试模式下运行了相同的构建。当我附加到调试会话时,我可以看到android-ndk-r16b 文件夹下的plaforms 目录。当我将我的 NDK Home 设置为该文件夹时,Travis 应该能够找到它。但它仍然无法找到它。
    • 您是否尝试过使用Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 执行构建?
    • 我也试过了。但这没有帮助。除了我在 Travis 日志中给出的信息外,它没有提供任何其他信息。 :(
    • Travis 上使用的 gradle 版本是什么?
    • 我正在使用gradle包装器,包装器版本是3.3
    【解决方案2】:

    因此,在 Travis CI 构建过程中经历了很多麻烦和大量调试会话之后,我找到了解决此问题的方法。显然,默认的android 工具链在其SDK 目录中搜索NDK。由于无法找到,它正在为NDK 抱怨。所以,我不得不使用默认工具链来获取NDK。下面是我的.travis.yml 文件的快照,它指向我为解决此问题所做的更改。

    要找到我两次添加tools的答案,您可以参考这个link。请参考下图找出文档的哪个部分可以参考答案。

    所以,正如 Travis CI 文档中提到的,当我们想要构建一个具有 SDK 级别 24 的 Android 项目时,我们需要在 @987654335 中使用两次 tools 选项@ 脚本。

    然后当我使用ndk-build 构建我的本机文件时,我只需要在yml 脚本中添加以下部分。

    # Configurations to set up Android NDK
    before_install:
      - echo y | sdkmanager "ndk-bundle"
    

    要记住的一件事。我在本地项目中使用C 语言。如果您使用的是C++,那么您可能需要为此安装Cmake。以下是该代码--

     before_install:
       - echo y | sdkmanager "ndk-bundle"
       - echo y | sdkmanager "cmake;3.6.4111459" # (Check the Cmake version you want to use)
    

    【讨论】:

      猜你喜欢
      • 2016-12-16
      • 1970-01-01
      • 2014-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      相关资源
      最近更新 更多