使用 Bitbucket 管道的 Android NDK CI

标签 android android-ndk ndk-build bitbucket-pipelines

我正在尝试使用 ndk-build(不是较新的 CMAKE)使用 Bitbucket Pipelines 持续集成构建一个 NDK Android 项目。但是在调用 ./gradlew assembleDebug 时出现以下错误:

/opt/android-sdk-linux/ndk-bundle/build/ndk-build: 144: /opt/android-sdk-linux/ndk-bundle/build/ndk-build: file: not found
:sensorylib:ndkBuild
make: Entering directory '/opt/atlassian/pipelines/agent/build/sensorylib/src/main'
/bin/sh: 1: file: not found
make: execvp: /opt/android-sdk-linux/ndk-bundle/build/extract_manifest.py: Permission denied
make: execvp: /opt/android-sdk-linux/ndk-bundle/build/extract_manifest.py: Permission denied
[armeabi] Install        : libSensoryVoiceJNI.so => libs/armeabi/libSensoryVoiceJNI.so
/opt/android-sdk-linux/ndk-bundle/build/core/build-binary.mk:797: recipe for target 'libs/armeabi/libSensoryVoiceJNI.so' failed
make: Leaving directory '/opt/atlassian/pipelines/agent/build/sensorylib/src/main'
make: /opt/android-sdk-linux/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86/bin/arm-linux-androideabi-strip: Command not found
make: *** [libs/armeabi/libSensoryVoiceJNI.so] Error 127
make: *** Deleting file 'libs/armeabi/libSensoryVoiceJNI.so'
:sensorylib:ndkBuild FAILED

20 actionable tasks: 20 executed
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':sensorylib:ndkBuild'.
> Process 'command '/opt/android-sdk-linux/ndk-bundle/ndk-build'' finished with non-zero exit value 2

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED in 45s

bitbucket-pipelines.yml

image: java:8

pipelines:
  default:
    - step:
        caches:
          - gradle
        script:
          # dependencies
          - apt-get update
          - apt-get -y install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
          # environment vars
          - export SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip"
          - export ANDROID_HOME="/opt/android-sdk-linux"
          - export ANDROID_NDK_HOME="$ANDROID_HOME/ndk-bundle"
          - export PATH="$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_NDK_HOME:$PATH"
          # download and unzip sdk
          - wget -q $SDK_URL -O android-sdk.zip
          - unzip android-sdk.zip -d $ANDROID_HOME && rm -f android-sdk.zip
          # accept all licences http://stackoverflow.com/questions/38096225/automatically-accept-all-sdk-licences
          - mkdir -p "$ANDROID_HOME/licenses"
          - echo -e "8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license"
          - echo -e "84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
          # download ndk
          - sdkmanager "ndk-bundle"
          # build
          - chmod +x gradlew
          - ./gradlew assembleDebug

ANDROID_NDK_HOME 路径似乎是正确的,因为我可以ls 文件夹,它看起来是正确的。 ndk-build 的权限看起来也设置正确...

最佳答案

错误是我在 apt-get install 依赖项中缺少 file

这是有效的 bitbucket-pipelines.yml

(我还设法减少了整体的 apt-get 依赖)

image: java:8

pipelines:
  default:
    - step:
        caches:
          - gradle
        script:
          # dependencies
          - apt-get update && apt-get -y install file build-essential
          # environment vars
          - export SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip"
          - export ANDROID_HOME="/opt/android-sdk-linux"
          - export ANDROID_NDK_HOME="$ANDROID_HOME/ndk-bundle"
          - export PATH="$ANDROID_HOME/tools:$ANDROID_HOME/tools/bin:$ANDROID_NDK_HOME:$PATH"
          # download and unzip sdk
          - wget -q $SDK_URL -O android-sdk.zip && unzip android-sdk.zip -d $ANDROID_HOME && rm -f android-sdk.zip
          # accept all licences http://stackoverflow.com/questions/38096225/automatically-accept-all-sdk-licences
          - mkdir -p "$ANDROID_HOME/licenses"
          - echo -e "8933bad161af4178b1185d1a37fbf41ea5269c55" > "$ANDROID_HOME/licenses/android-sdk-license"
          - echo -e "84831b9409646a918e30573bab4c9c91346d8abd" > "$ANDROID_HOME/licenses/android-sdk-preview-license"
          # download ndk
          - sdkmanager "ndk-bundle"
          # build
          - chmod +x gradlew
          - ./gradlew assembleDebug

关于使用 Bitbucket 管道的 Android NDK CI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45288197/

相关文章:

android - 静态确定Android apk中未使用的代码路径

java - 抛出 RecyclerView 后 layout_centerInParent 不工作

android - 解决 Android makefile 中的循环依赖

android - 将 int main() 更改为 JNI 接口(interface)原型(prototype)

Android.mk 没有制定目标 '*.c' 的规则,需要 '*.o' 。停止

c - 使用 android-ndk 独立工具链时发生未知指令 .altmacro 错误

android - 在 android 上从 r.raw 读取文本文件

java - 返回主要 Activity

Android Studio 原生代码编译速度慢

启用了 pthread_cancel 的 Android? ffmpeg 依赖于 pthread_cancel