# vim: ft=dockerfile: # Dockerfile to build aria2 android binary # # $ sudo docker build -t aria2-android - < Dockerfile.android # # After successful build, android binary is located under # /root/build/aria2. You can copy the binary using docker cp. For # example, to copy aria2c binary to host file system location # /path/to/dest, do this: # # $ sudo docker run --rm -it -v /path/to/dest:/out aria2-android cp /root/build/aria2/src/aria2c /out FROM ubuntu:22.04 MAINTAINER Tatsuhiro Tsujikawa WORKDIR /root RUN apt-get update && \ apt-get install -y --no-install-recommends \ unzip bzip2 make binutils autoconf automake autotools-dev autopoint \ libtool pkg-config git curl ca-certificates && \ rm -rf /var/cache/apt/* # NDK version ENV NDK_VERSION=r25c ENV NDK=/root/android-ndk-$NDK_VERSION ENV TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64 \ HOST=aarch64-linux-android \ API=33 ENV AR=$TOOLCHAIN/bin/llvm-ar \ CC=$TOOLCHAIN/bin/$HOST$API-clang \ CXX=$TOOLCHAIN/bin/$HOST$API-clang++ \ LD=$TOOLCHAIN/bin/ld \ RANDLIB=$TOOLCHAIN/bin/llvm-ranlib \ STRIP=$TOOLCHAIN/bin/llvm-strip \ PREFIX=/root/usr/local # Download NDK RUN curl -L -O https://dl.google.com/android/repository/android-ndk-$NDK_VERSION-linux.zip && \ unzip -q android-ndk-$NDK_VERSION-linux.zip && \ rm android-ndk-$NDK_VERSION-linux.zip # aria2 version ENV ARIA2_VERSION master # Library versions ENV OPENSSL_VERSION=1.1.1w ENV OPENSSL_ARCHIVE=openssl-$OPENSSL_VERSION.tar.gz ENV OPENSSL_URI=https://www.openssl.org/source/$OPENSSL_ARCHIVE ENV LIBEXPAT_VERSION=2.5.0 ENV LIBEXPAT_ARCHIVE=expat-$LIBEXPAT_VERSION.tar.bz2 ENV LIBEXPAT_URI=https://github.com/libexpat/libexpat/releases/download/R_2_5_0/$LIBEXPAT_ARCHIVE ENV ZLIB_VERSION=1.3 ENV ZLIB_ARCHIVE=zlib-$ZLIB_VERSION.tar.gz ENV ZLIB_URI=https://zlib.net/$ZLIB_ARCHIVE ENV CARES_VERSION=1.19.1 ENV CARES_ARCHIVE=c-ares-$CARES_VERSION.tar.gz ENV CARES_URI=https://c-ares.haxx.se/download/$CARES_ARCHIVE ENV LIBSSH2_VERSION=1.11.0 ENV LIBSSH2_ARCHIVE=libssh2-$LIBSSH2_VERSION.tar.bz2 ENV LIBSSH2_URI=https://libssh2.org/download/$LIBSSH2_ARCHIVE # Build OpenSSL WORKDIR /root/build RUN curl -L -O $OPENSSL_URI && tar xf $OPENSSL_ARCHIVE && rm $OPENSSL_ARCHIVE WORKDIR /root/build/openssl-$OPENSSL_VERSION RUN export ANDROID_NDK_HOME=$NDK PATH=$TOOLCHAIN/bin:$PATH && \ ./Configure no-shared --prefix=$PREFIX android-arm64 && \ make -j$(nproc) && make install_sw # Build libexpat WORKDIR /root/build RUN curl -L -O $LIBEXPAT_URI && tar xf $LIBEXPAT_ARCHIVE && rm $LIBEXPAT_ARCHIVE WORKDIR /root/build/expat-$LIBEXPAT_VERSION RUN ./configure \ --host=$HOST \ --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \ --prefix=$PREFIX \ --disable-shared && \ make -j$(nproc) install # Build zlib WORKDIR /root/build RUN curl -L -O $ZLIB_URI && tar xf $ZLIB_ARCHIVE && rm $ZLIB_ARCHIVE WORKDIR /root/build/zlib-$ZLIB_VERSION RUN ./configure \ --prefix=$PREFIX \ --libdir=$PREFIX/lib \ --includedir=$PREFIX/include \ --static && \ make -j$(nproc) install # Build c-ares WORKDIR /root/build RUN curl -L -O $CARES_URI && tar xf $CARES_ARCHIVE && rm $CARES_ARCHIVE WORKDIR /root/build/c-ares-$CARES_VERSION RUN ./configure \ --host=$HOST \ --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \ --prefix=$PREFIX \ --disable-shared && \ make -j$(nproc) install # Build libssh2 WORKDIR /root/build RUN curl -L -O $LIBSSH2_URI && tar xf $LIBSSH2_ARCHIVE && rm $LIBSSH2_ARCHIVE WORKDIR /root/build/libssh2-$LIBSSH2_VERSION RUN ./configure \ --host=$HOST \ --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \ --prefix=$PREFIX \ --disable-shared && \ make -j$(nproc) install # Build aria2 WORKDIR /root/build RUN git clone https://github.com/aria2/aria2 -b $ARIA2_VERSION --depth 1 WORKDIR /root/build/aria2 RUN autoreconf -i && \ ./configure \ --host=$HOST \ --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \ --disable-nls \ --without-gnutls \ --with-openssl \ --without-sqlite3 \ --without-libxml2 \ --with-libexpat \ --with-libcares \ --with-libz \ --with-libssh2 \ CXXFLAGS="-Os -g" \ CFLAGS="-Os -g" \ CPPFLAGS="-fPIE" \ LDFLAGS="-fPIE -pie -L$PREFIX/lib -static-libstdc++" \ PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" && \ make -j$(nproc) && \ $STRIP src/aria2c