Building Android binaryΒΆ
+In this article, we briefly describe how to build Android binary using +Android NDK +cross-compiler on Debian Linux.
+We offer android-config and android-make scripts to make the +build easier. To make these script work, NDK toolchain must be +installed in the following way. First, let us introduce +ANDROID_HOME environment variable. We need to install toolchain +under $ANDROID_HOME/toolchain. An user can freely choose the path +for ANDROID_HOME. For example, to install toolchain under +$ANDROID_HOME/toolchain, do this in the the directory where NDK is +unpacked:
+$ build/tools/make-standalone-toolchain.sh \
+ --install-dir=$ANDROID_HOME/toolchain \
+ --toolchain=arm-linux-androideabi-4.8 \
+ --llvm-version=3.4
+
The additional flag --system=linux-x86_64 may be required if you +are using x86_64 system.
+The platform level is not important here because we don’t use Android +specific C/C++ API.
+The dependent libraries, such as OpenSSL and libevent should be built +with the toolchain and installed under $ANDROID_HOME/usr/local. +We recommend to build these libraries as static library to make the +deployment easier. libxml2 support is currently disabled.
+We use zlib which comes with Android NDK, so we don’t have to build it +by ourselves.
+If SPDY support is required for nghttpx and h2load, build and install +spdylay as well.
+Before running android-config and android-make, +ANDROID_HOME environment variable must be set to point to the +correct path. Also add $ANDROID_HOME/toolchain/bin to PATH:
+$ export PATH=$PATH:$ANDROID_HOME/toolchain/bin
+
To configure OpenSSL, use the following script:
+#!/bin/sh
+
+if [ -z "$ANDROID_HOME" ]; then
+ echo 'No $ANDROID_HOME specified.'
+ exit 1
+fi
+PREFIX=$ANDROID_HOME/usr/local
+TOOLCHAIN=$ANDROID_HOME/toolchain
+PATH=$TOOLCHAIN/bin:$PATH
+
+export CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
+./Configure --prefix=$PREFIX android
+
And run make install to build and install.
+To configure libevent, use the following script:
+#!/bin/sh
+
+if [ -z "$ANDROID_HOME" ]; then
+ echo 'No $ANDROID_HOME specified.'
+ exit 1
+fi
+PREFIX=$ANDROID_HOME/usr/local
+TOOLCHAIN=$ANDROID_HOME/toolchain
+PATH=$TOOLCHAIN/bin:$PATH
+
+./configure \
+ --host=arm-linux-androideabi \
+ --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
+ --prefix=$PREFIX \
+ --disable-shared \
+ --enable-static \
+ CPPFLAGS=-I$PREFIX/include \
+ LDFLAGS=-L$PREFIX/lib
+
And run make install to build and install.
+To configure spdylay, use the following script:
+if [ -z "$ANDROID_HOME" ]; then
+ echo 'No $ANDROID_HOME specified.'
+ exit 1
+fi
+PREFIX=$ANDROID_HOME/usr/local
+TOOLCHAIN=$ANDROID_HOME/toolchain
+PATH=$TOOLCHAIN/bin:$PATH
+
+./configure \
+ --disable-shared \
+ --host=arm-linux-androideabi \
+ --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
+ --prefix=$PREFIX \
+ --without-libxml2 \
+ --disable-src \
+ --disable-examples \
+ CPPFLAGS="-I$PREFIX/include" \
+ PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
+ LDFLAGS="-L$PREFIX/lib"
+
And run make install to build and install. After spdylay +installation, edit $ANDROID_HOME/usr/local/lib/pkgconfig/libspdylay.pc +and remove the following line:
+Requires.private: zlib
+
After prerequisite libraries are prepared, run android-config and +then android-make to compile nghttp2 source files.
+If all went well, application binaries, such as nghttpx, are created +under src directory. Strip debugging information from the binary +using the following command:
+$ arm-linux-androideabi-strip src/nghttpx
+