Dockerfile.android 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. python3-docutils && \
  20. rm -rf /var/cache/apt/*
  21. # NDK version
  22. ENV NDK_VERSION=r25c
  23. ENV NDK=/root/android-ndk-$NDK_VERSION
  24. ENV TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64 \
  25. HOST=aarch64-linux-android \
  26. API=33
  27. ENV AR=$TOOLCHAIN/bin/llvm-ar \
  28. CC=$TOOLCHAIN/bin/$HOST$API-clang \
  29. CXX=$TOOLCHAIN/bin/$HOST$API-clang++ \
  30. LD=$TOOLCHAIN/bin/ld \
  31. RANDLIB=$TOOLCHAIN/bin/llvm-ranlib \
  32. STRIP=$TOOLCHAIN/bin/llvm-strip \
  33. PREFIX=/root/usr/local
  34. # Download NDK
  35. RUN curl -L -O https://dl.google.com/android/repository/android-ndk-$NDK_VERSION-linux.zip && \
  36. unzip -q android-ndk-$NDK_VERSION-linux.zip && \
  37. rm android-ndk-$NDK_VERSION-linux.zip
  38. # aria2 version
  39. ARG ARIA2_VERSION=master
  40. # Library versions
  41. ENV OPENSSL_VERSION=1.1.1w
  42. ENV OPENSSL_ARCHIVE=openssl-$OPENSSL_VERSION.tar.gz
  43. ENV OPENSSL_URI=https://www.openssl.org/source/$OPENSSL_ARCHIVE
  44. ENV LIBEXPAT_VERSION=2.5.0
  45. ENV LIBEXPAT_ARCHIVE=expat-$LIBEXPAT_VERSION.tar.bz2
  46. ENV LIBEXPAT_URI=https://github.com/libexpat/libexpat/releases/download/R_2_5_0/$LIBEXPAT_ARCHIVE
  47. ENV ZLIB_VERSION=1.3.1
  48. ENV ZLIB_ARCHIVE=zlib-$ZLIB_VERSION.tar.gz
  49. ENV ZLIB_URI=https://github.com/madler/zlib/releases/download/v1.3.1/$ZLIB_ARCHIVE
  50. ENV CARES_VERSION=1.21.0
  51. ENV CARES_ARCHIVE=c-ares-$CARES_VERSION.tar.gz
  52. ENV CARES_URI=https://github.com/c-ares/c-ares/releases/download/cares-1_21_0/$CARES_ARCHIVE
  53. ENV LIBSSH2_VERSION=1.11.0
  54. ENV LIBSSH2_ARCHIVE=libssh2-$LIBSSH2_VERSION.tar.bz2
  55. ENV LIBSSH2_URI=https://libssh2.org/download/$LIBSSH2_ARCHIVE
  56. # Build OpenSSL
  57. WORKDIR /root/build
  58. RUN curl -L -O $OPENSSL_URI && tar xf $OPENSSL_ARCHIVE && rm $OPENSSL_ARCHIVE
  59. WORKDIR /root/build/openssl-$OPENSSL_VERSION
  60. RUN export ANDROID_NDK_HOME=$NDK PATH=$TOOLCHAIN/bin:$PATH && \
  61. ./Configure no-shared --prefix=$PREFIX android-arm64 && \
  62. make -j$(nproc) && make install_sw
  63. # Build libexpat
  64. WORKDIR /root/build
  65. RUN curl -L -O $LIBEXPAT_URI && tar xf $LIBEXPAT_ARCHIVE && rm $LIBEXPAT_ARCHIVE
  66. WORKDIR /root/build/expat-$LIBEXPAT_VERSION
  67. RUN ./configure \
  68. --host=$HOST \
  69. --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
  70. --prefix=$PREFIX \
  71. --disable-shared && \
  72. make -j$(nproc) install
  73. # Build zlib
  74. WORKDIR /root/build
  75. RUN curl -L -O $ZLIB_URI && tar xf $ZLIB_ARCHIVE && rm $ZLIB_ARCHIVE
  76. WORKDIR /root/build/zlib-$ZLIB_VERSION
  77. RUN ./configure \
  78. --prefix=$PREFIX \
  79. --libdir=$PREFIX/lib \
  80. --includedir=$PREFIX/include \
  81. --static && \
  82. make -j$(nproc) install
  83. # Build c-ares
  84. WORKDIR /root/build
  85. RUN curl -L -O $CARES_URI && tar xf $CARES_ARCHIVE && rm $CARES_ARCHIVE
  86. WORKDIR /root/build/c-ares-$CARES_VERSION
  87. RUN ./configure \
  88. --host=$HOST \
  89. --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
  90. --prefix=$PREFIX \
  91. --disable-shared && \
  92. make -j$(nproc) install
  93. # Build libssh2
  94. WORKDIR /root/build
  95. RUN curl -L -O $LIBSSH2_URI && tar xf $LIBSSH2_ARCHIVE && rm $LIBSSH2_ARCHIVE
  96. WORKDIR /root/build/libssh2-$LIBSSH2_VERSION
  97. RUN ./configure \
  98. --host=$HOST \
  99. --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
  100. --prefix=$PREFIX \
  101. --disable-shared && \
  102. make -j$(nproc) install
  103. # Build aria2
  104. WORKDIR /root/build
  105. RUN git clone -b $ARIA2_VERSION --depth 1 https://github.com/aria2/aria2
  106. WORKDIR /root/build/aria2
  107. RUN autoreconf -i && \
  108. ./configure \
  109. --host=$HOST \
  110. --build=`dpkg-architecture -qDEB_BUILD_GNU_TYPE` \
  111. --disable-nls \
  112. --without-gnutls \
  113. --with-openssl \
  114. --without-sqlite3 \
  115. --without-libxml2 \
  116. --with-libexpat \
  117. --with-libcares \
  118. --with-libz \
  119. --with-libssh2 \
  120. CXXFLAGS="-Os -g" \
  121. CFLAGS="-Os -g" \
  122. CPPFLAGS="-fPIE" \
  123. LDFLAGS="-fPIE -pie -L$PREFIX/lib -static-libstdc++" \
  124. PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" && \
  125. make -j$(nproc) && \
  126. $STRIP src/aria2c