Dockerfile.android 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. # vim: ft=dockerfile:
  2. # Dockerfile to build aria2 android binary
  3. #
  4. # $ sudo docker build -t aria2-android - < Dockerfile.android
  5. #
  6. # After successful build, android binary is located under
  7. # /root/build/aria2. You can copy the binary using docker cp. For
  8. # example, to copy aria2c binary to host file system location
  9. # /path/to/dest, do this:
  10. #
  11. # $ sudo docker run --rm -it -v /path/to/dest:/out aria2-android cp /root/build/aria2/src/aria2c /out
  12. FROM ubuntu:22.04
  13. MAINTAINER Tatsuhiro Tsujikawa
  14. WORKDIR /root
  15. RUN apt-get update && \
  16. apt-get install -y --no-install-recommends \
  17. unzip bzip2 make binutils autoconf automake autotools-dev autopoint \
  18. libtool pkg-config git dpkg-dev curl ca-certificates && \
  19. rm -rf /var/cache/apt/*
  20. # NDK version
  21. ENV NDK_VERSION=r25c
  22. ENV NDK=/root/android-ndk-$NDK_VERSION
  23. ENV TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64 \
  24. HOST=aarch64-linux-android \
  25. API=33
  26. ENV AR=$TOOLCHAIN/bin/llvm-ar \
  27. CC=$TOOLCHAIN/bin/$HOST$API-clang \
  28. CXX=$TOOLCHAIN/bin/$HOST$API-clang++ \
  29. LD=$TOOLCHAIN/bin/ld \
  30. RANDLIB=$TOOLCHAIN/bin/llvm-ranlib \
  31. STRIP=$TOOLCHAIN/bin/llvm-strip \
  32. PREFIX=/root/usr/local
  33. # Download NDK
  34. RUN curl -L -O https://dl.google.com/android/repository/android-ndk-$NDK_VERSION-linux.zip && \
  35. unzip -q android-ndk-$NDK_VERSION-linux.zip && \
  36. rm android-ndk-$NDK_VERSION-linux.zip
  37. # aria2 version
  38. ARG ARIA2_VERSION=master
  39. # Library versions
  40. ENV OPENSSL_VERSION=1.1.1w
  41. ENV OPENSSL_ARCHIVE=openssl-$OPENSSL_VERSION.tar.gz
  42. ENV OPENSSL_URI=https://www.openssl.org/source/$OPENSSL_ARCHIVE
  43. ENV LIBEXPAT_VERSION=2.5.0
  44. ENV LIBEXPAT_ARCHIVE=expat-$LIBEXPAT_VERSION.tar.bz2
  45. ENV LIBEXPAT_URI=https://github.com/libexpat/libexpat/releases/download/R_2_5_0/$LIBEXPAT_ARCHIVE
  46. ENV ZLIB_VERSION=1.3
  47. ENV ZLIB_ARCHIVE=zlib-$ZLIB_VERSION.tar.gz
  48. ENV ZLIB_URI=https://zlib.net/$ZLIB_ARCHIVE
  49. ENV CARES_VERSION=1.19.1
  50. ENV CARES_ARCHIVE=c-ares-$CARES_VERSION.tar.gz
  51. ENV CARES_URI=https://c-ares.haxx.se/download/$CARES_ARCHIVE
  52. ENV LIBSSH2_VERSION=1.11.0
  53. ENV LIBSSH2_ARCHIVE=libssh2-$LIBSSH2_VERSION.tar.bz2
  54. ENV LIBSSH2_URI=https://libssh2.org/download/$LIBSSH2_ARCHIVE
  55. # Build OpenSSL
  56. WORKDIR /root/build
  57. RUN curl -L -O $OPENSSL_URI && tar xf $OPENSSL_ARCHIVE && rm $OPENSSL_ARCHIVE
  58. WORKDIR /root/build/openssl-$OPENSSL_VERSION
  59. RUN export ANDROID_NDK_HOME=$NDK PATH=$TOOLCHAIN/bin:$PATH && \
  60. ./Configure no-shared --prefix=$PREFIX android-arm64 && \
  61. make -j$(nproc) && make install_sw
  62. # Build libexpat
  63. WORKDIR /root/build
  64. RUN curl -L -O $LIBEXPAT_URI && tar xf $LIBEXPAT_ARCHIVE && rm $LIBEXPAT_ARCHIVE
  65. WORKDIR /root/build/expat-$LIBEXPAT_VERSION
  66. RUN ./configure \
  67. --host=$HOST \
  68. --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
  69. --prefix=$PREFIX \
  70. --disable-shared && \
  71. make -j$(nproc) install
  72. # Build zlib
  73. WORKDIR /root/build
  74. RUN curl -L -O $ZLIB_URI && tar xf $ZLIB_ARCHIVE && rm $ZLIB_ARCHIVE
  75. WORKDIR /root/build/zlib-$ZLIB_VERSION
  76. RUN ./configure \
  77. --prefix=$PREFIX \
  78. --libdir=$PREFIX/lib \
  79. --includedir=$PREFIX/include \
  80. --static && \
  81. make -j$(nproc) install
  82. # Build c-ares
  83. WORKDIR /root/build
  84. RUN curl -L -O $CARES_URI && tar xf $CARES_ARCHIVE && rm $CARES_ARCHIVE
  85. WORKDIR /root/build/c-ares-$CARES_VERSION
  86. RUN ./configure \
  87. --host=$HOST \
  88. --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
  89. --prefix=$PREFIX \
  90. --disable-shared && \
  91. make -j$(nproc) install
  92. # Build libssh2
  93. WORKDIR /root/build
  94. RUN curl -L -O $LIBSSH2_URI && tar xf $LIBSSH2_ARCHIVE && rm $LIBSSH2_ARCHIVE
  95. WORKDIR /root/build/libssh2-$LIBSSH2_VERSION
  96. RUN ./configure \
  97. --host=$HOST \
  98. --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
  99. --prefix=$PREFIX \
  100. --disable-shared && \
  101. make -j$(nproc) install
  102. # Build aria2
  103. WORKDIR /root/build
  104. RUN git clone -b $ARIA2_VERSION --depth 1 https://github.com/aria2/aria2
  105. WORKDIR /root/build/aria2
  106. RUN autoreconf -i && \
  107. ./configure \
  108. --host=$HOST \
  109. --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
  110. --disable-nls \
  111. --without-gnutls \
  112. --with-openssl \
  113. --without-sqlite3 \
  114. --without-libxml2 \
  115. --with-libexpat \
  116. --with-libcares \
  117. --with-libz \
  118. --with-libssh2 \
  119. CXXFLAGS="-Os -g" \
  120. CFLAGS="-Os -g" \
  121. CPPFLAGS="-fPIE" \
  122. LDFLAGS="-fPIE -pie -L$PREFIX/lib -static-libstdc++" \
  123. PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" && \
  124. make -j$(nproc) && \
  125. $STRIP src/aria2c