If the NDK version which is preinstalled on the Android stack is not the one you want to use, you can install any version via a Script step.
Simply add a Script step as the very first step in the workflow, with the following content:
#!/usr/bin/env bash
set -ex
# set env vars
export ANDROID_NDK_VERSION='r15b'
export ANDROID_NDK_HOME='/opt/android-ndk'
# expose for subsequent steps
envman add --key ANDROID_NDK_HOME --value "$ANDROID_NDK_HOME"
# ------------------------------------------------------
# --- Android NDK
# clean up if a previous version is already installed
rm -rf "$ANDROID_NDK_HOME"
# download
mkdir /opt/android-ndk-tmp
cd /opt/android-ndk-tmp
wget -q https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip
# uncompress
unzip -q android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip
# move to its final location
mv ./android-ndk-${ANDROID_NDK_VERSION} ${ANDROID_NDK_HOME}
# remove temp dir
cd ${ANDROID_NDK_HOME}
rm -rf /opt/android-ndk-tmp
# add to PATH
export PATH=${PATH}:${ANDROID_NDK_HOME}
# expose for subsequent steps
envman add --key PATH --value "$PATH"
Don’t forget to specify the version, at the top of the script (ANDROID_NDK_VERSION variable - in this example it’s set to r15b).
That’s all!
4 Likes
koral
May 14, 2018, 7:21pm
2
ANDROID_NDK_HOME is already added to PATH in Dockerfile: https://github.com/bitrise-docker/android-ndk/blob/master/Dockerfile#L30
Value of ANDROID_NDK_HOME is not changed so there should be no need to append it again to PATH.
You’re right in case of the bitrise.io environment, but this #how-to was created as a generic guide, which can work even locally on your own Mac/PC
Hi! Thank you for the script! Nevertheless, I was trying to include it in my builds and faced the following problem:
+ unzip -q android-ndk-r10e-linux-x86_64.zip
replace android-ndk-r10e/platforms/android-21/arch-arm/usr/include/linux/netfilter/xt_CONNMARK.h? [y]es, [n]o, [A]ll, [N]one, [r]ename: NULL
(EOF or read error, treating as "[N]one" ...)
| |
+---+---------------------------------------------------------------+----------+
| x | BITRISE - install ndk (exit code: 1) | 129 sec |
+---+---------------------------------------------------------------+----------+
| Issue tracker: https://github.com/bitrise-io/steps-script/issues |
| Source: https://github.com/bitrise-io/steps-script |
+---+---------------------------------------------------------------+----------+
Any hints on what is failing and how to fix it? Thank you!
Hi @rafaaddison ,
Could you send us the build’s URL so we can have a look at the logs?
koral
July 31, 2018, 1:01pm
6
It seems that you are either calling that unzip twice or there is android-ndk-r10e produced in some other way.
If it is intended that you have an existing android-ndk-r10e directory and want to unzip NDK there you can just add o option to unizip. So it will be unzip -qo android-ndk-${ANDROID_NDK_VERSION}-linux-x86_64.zip.
However, the proper fix seems to be unzipping only once.
Thanks for the reply. Indeed there seems to be already an existing android-ndk-r10e directory.
I ended up using echo "A" | unzip -q android-ndk-r10e-linux-x86_64.zip Which takes the A as the response to the prompt question.
As a side note I needed also to use the -darwin version instead of the linux one.
1 Like
I also made a step that can handle both Linux and Mac: https://github.com/viktorbenei/bitrise-step-install-android-ndk-version
As it’s not shared in the StepLib (we probably will include this logic in another step and not have a separate one just for the NDK install) you can include it with the git:: reference style in your bitrise.yml:
- git::https://github.com/viktorbenei/bitrise-step-install-android-ndk-version.git@master:
inputs:
- android_ndk_version: r12b
Once added to the bitrise.yml you can use the UI to change the version, or just change the version in the YML (in this example above it’ll install r12b).
1 Like
Thank you very much.
Using install-missing-android-tools@2.3.5 and specifying r19b as NDK version, it failed with following error:
Ensure required Android SDK components
Retrying...
Failed to ensure android components, error: output: > Configure project :app
NDK is missing a "platforms" directory.
But after I added they install ndk step from Viktor, everything works fine.
Thanks for this “custom” step.
Regards
1 Like