7

我对使用Bitbucket Pipelines的 CI 完全陌生,目前正在本文的帮助下设置管道。由于此错误,我的构建失败

“在 ABI 的 NDK 工具链文件夹中找不到工具链,前缀为:aarch64-linux-android”

谁能帮我解决这个问题?

4

3 回答 3

7

今天我遇到了和你一样的问题。我也关注了你提到的博客文章。任何。我很高兴向您报告:我已修复它并找到了“解决方案”!

有趣的是:解决方案如此简单。您唯一需要做的就是unset(或删除)NDK 环境变量(或目录)。

神奇的线是:

- unset ANDROID_NDK_HOME

这意味着我的最终结果bitbucket-pipelines.yml如下:

image: uber/android-build-environment:latest

pipelines:
  default:
    - step:
        script:
          - unset ANDROID_NDK_HOME
          - ./ci/accept_android_license.sh
          - ./gradlew :app:testDebugUnitTest

为什么它可以解决问题?

老实说。我不知道 。但我发现ubers为你android-build-environment 安装了 NDK

我找到了一些答案——比如这里——再次单独安装 NDK。但我想到了以下问题:如果我的项目不使用 NDK,我为什么要安装/更新它?所以我尝试删除 NDK 文件夹(根据Dockerfile位于的位置/usr/local/android-ndk)并且一切正常。

那为什么要unset叮?

您无法删除该android-ndk目录,因为您无权执行此操作。但是您可以从中删除内容。这就是它与rm -rf /usr/local/android-ndk. 但是然后 - 设置ANDROID_NDK_HOME但没有任何内容,您会收到错误消息(在构建时):

./gradlew :app:testDebugUnitTest

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 /usr/local/android-ndk.
If you are not using NDK, unset the NDK variable from ANDROID_NDK_HOME or local.properties to remove this warning.

unset环境变量也修复了该警告。

重要的:

显然这不是最好的解决方案。如果您的应用程序使用 NDK,此解决方案将无济于事。在脚本中“从 Docker 映像”中删除一些环境变量CI也不是最好的解决方案。也许图像稍后需要该变量(不知道这在 Docker 中是否可行……但你知道我的意思)。但它会“临时”解决问题,因为它android-build-environment没有维护(一年后没有更新),我不会花太多精力来修复图像......

注意: GitHub 页面的链接uber:android-build-environment指的是单个(当前是最后一个)提交。如果将来有人读到该链接仍然有效且正确,但master分支可能已更改。

于 2017-07-22T07:27:10.013 回答
4
cd .../AndroidSdk/ndk-bundle/toolchains
ln -s aarch64-linux-android-4.9 mips64el-linux-android-4.9
ln -s arm-linux-androideabi-4.9 mipsel-linux-android-4.9
于 2018-03-28T15:30:09.227 回答
0

您需要下载android ndk并安装类似这样的独立工具链

$NDK/build/tools/make_standalone_toolchain.py \ --arch arm --api 21 --install-dir /tmp/my-android-toolchain

有时您必须为工具链创建环境变量。

于 2017-05-22T17:30:31.210 回答