1#!/bin/bash 2################################################################################ 3# THIS FILE IS 100% GENERATED BY ZPROJECT; DO NOT EDIT EXCEPT EXPERIMENTALLY # 4# Read the zproject/README.md for information about making permanent changes. # 5################################################################################ 6# Build JNI interface for Android 7# 8# Requires these environment variables be set, e.g.: 9# 10# ANDROID_NDK_ROOT=$HOME/android-ndk-r20 11# 12# Exit if any step fails 13set -e 14 15# Set this to enable verbose profiling 16[ -n "${CI_TIME-}" ] || CI_TIME="" 17case "$CI_TIME" in 18 [Yy][Ee][Ss]|[Oo][Nn]|[Tt][Rr][Uu][Ee]) 19 CI_TIME="time -p " ;; 20 [Nn][Oo]|[Oo][Ff][Ff]|[Ff][Aa][Ll][Ss][Ee]) 21 CI_TIME="" ;; 22esac 23 24# Set this to enable verbose tracing 25[ -n "${CI_TRACE-}" ] || CI_TRACE="no" 26case "$CI_TRACE" in 27 [Nn][Oo]|[Oo][Ff][Ff]|[Ff][Aa][Ll][Ss][Ee]) 28 set +x ;; 29 [Yy][Ee][Ss]|[Oo][Nn]|[Tt][Rr][Uu][Ee]) 30 set -x 31 MAKE_OPTIONS=VERBOSE=1 32 ;; 33esac 34 35function usage { 36 echo "Usage ./build.sh [ arm | arm64 | x86 | x86_64 ]" 37} 38 39BUILD_ARCH=$1 40if [ -z $BUILD_ARCH ]; then 41 usage 42 exit 1 43fi 44 45source ../../../../builds/android/android_build_helper.sh 46 47export MIN_SDK_VERSION=21 48export ANDROID_BUILD_DIR=/tmp/android_build 49 50# Build any dependent libraries 51# Use a default value assuming that dependent libraries sits alongside this one 52 53# Ensure we've built dependencies for Android 54echo "******** Building CZMQ Android native libraries" 55( cd ../../../../builds/android && ./build.sh $BUILD_ARCH ) 56 57# Ensure we've built JNI interface 58echo "******** Building CZMQ JNI interface & classes" 59( cd ../.. && TERM=dumb ./gradlew build jar -PbuildPrefix=$BUILD_PREFIX --info ) 60 61echo "******** Building CZMQ JNI for Android" 62rm -rf build && mkdir build && cd build 63# Export android build's environment variables for cmake 64android_build_set_env $BUILD_ARCH 65cmake -v \ 66 -DANDROID_ABI=$TOOLCHAIN_ABI \ 67 -DANDROID_PLATFORM=$MIN_SDK_VERSION \ 68 -DANDROID_STL=c++_shared \ 69 -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake \ 70 -DCMAKE_FIND_ROOT_PATH=$ANDROID_BUILD_PREFIX \ 71 .. 72 73# CMake wrongly searches current directory and then toolchain path instead 74# of lib path for these files, so make them available temporarily 75ln -s $ANDROID_SYS_ROOT/usr/lib/crtend_so.o 76ln -s $ANDROID_SYS_ROOT/usr/lib/crtbegin_so.o 77 78make $MAKE_OPTIONS 79 80echo "******** Building jar for $TOOLCHAIN_ABI" 81# Copy class files into org/zeromq/etc. 82find ../../build/libs/ -type f -name 'czmq-jni-*.jar' ! -name '*javadoc.jar' ! -name '*sources.jar' -exec unzip -q {} + 83 84# Copy native libraries into lib/$TOOLCHAIN_ABI 85mkdir -p lib/$TOOLCHAIN_ABI 86cp libczmqjni.so lib/$TOOLCHAIN_ABI 87cp $ANDROID_BUILD_PREFIX/lib/*.so lib/$TOOLCHAIN_ABI 88cp $ANDROID_NDK_ROOT/sources/cxx-stl/llvm-libc++/libs/$TOOLCHAIN_ABI/libc++_shared.so lib/$TOOLCHAIN_ABI 89 90# Build android jar 91zip -r -m ../czmq-android-$TOOLCHAIN_ABI-4.2.1.jar lib/ org/ META-INF/ 92cd .. 93rm -rf build 94 95echo "******** Merging ABI jars" 96mkdir build && cd build 97# Copy contents from all ABI jar - overwriting class files and manifest 98unzip -qo '../czmq-android-*4.2.1.jar' 99# Build merged jar 100zip -r -m ../czmq-android-4.2.1.jar lib/ org/ META-INF/ 101cd .. 102rm -rf build 103 104echo "******** Complete" 105