Requirements:

Download the Android NDK:

Android NDK r21e (Linux x86_64)

Install dependencies for cross-compiling:

sudo apt update
sudo apt install -y \
    autoconf \
    automake \
    bison \
    bc \
    build-essential \
    clang \
    cpio \
    cmake \
    cmake-format \
    curl \
    debhelper \
    debhelper-compat \
    device-tree-compiler \
    dpkg-dev \
    dwarves \
    file \
    fakeroot \
    flex \
    g++ \
    g++-multilib \
    git \
    gawk \
    gettext \
    libdb-dev \
    libelf-dev \
    libffi-dev \
    libgmp-dev \
    liblzma-dev \
    libmpc-dev \
    libmpfr-dev \
    libncurses-dev \
    libncurses5-dev \
    libssl-dev \
    libtool \
    make \
    ninja-build \
    patch \
    pkg-config \
    python3 \
    python3-pip \
    python3-setuptools \
    rsync \
    unzip \
    wget \
    xsltproc \
    zip \
    zlib1g-dev

#!/usr/bin/env bash
# OpenSSL Android arm64 cross-compile script for OnePlus 3/3T (API 29)
# Tested with NDK r21e and OpenSSL 3.x
# ToDo Add zlib etc

set -e

export NDK=/root/android-ndk-r21e
export API=29
export PREFIX=/root/static_prefix

export CC="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android${API}-clang"
export AR="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar"
export RANLIB="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ranlib"
export STRIP="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip"

export CFLAGS="-fPIC -D__ANDROID_API__=$API -I$PREFIX/include"
export LDFLAGS="-L$PREFIX/lib"
export PATH="$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH"


git clone https://github.com/kobolabs/liblzma.git
cd liblzma

./configure \
  --host=aarch64-linux-android \
  --build=x86_64-pc-linux-gnu \
  --disable-shared \
  --enable-static \
  CC="$CC" AR="$AR" RANLIB="$RANLIB" STRIP="$STRIP" \
  --prefix=/root/static_prefix

make -j$(nproc)
make install
cd ..

wget https://zlib.net/zlib-1.3.1.tar.gz
tar -xf zlib-1.3.1.tar.gz
rm -rf zlib-1.3.1.tar.gz

cd zlib-1.3.1

./configure \
  --static \
  --prefix=/root/static_prefix

make -j$(nproc)
make install
cd ..
    
wget https://github.com/facebook/zstd/releases/download/v1.5.7/zstd-1.5.7.tar.gz
tar xf zstd-1.5.7.tar.gz

cd zstd-1.5.7

make clean || true

make -C lib -j$(nproc) libzstd.a CC="$CC" AR="$AR" RANLIB="$RANLIB" CFLAGS="$CFLAGS"

mkdir -p /root/static_prefix/lib /root/static_prefix/include/zstd
cp lib/libzstd.a /root/static_prefix/lib/
cp -r lib/zstd.h lib/zdict.h /root/static_prefix/include/zstd/

cd ..

echo "Installing openssl"
git clone https://github.com/openssl/openssl.git

NDK_ROOT="/root/android-ndk-r21e"
OPENSSL_DIR="/root/openssl"
INSTALL_DIR="/root/static_prefix"
ANDROID_API=29

export ANDROID_NDK_ROOT="$NDK_ROOT"
export ANDROID_NDK_HOME="$NDK_ROOT"
export PATH="$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH"

if [ ! -f "$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android${ANDROID_API}-clang" ]; then
    echo "ERROR: Compiler not found at $NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/"
    exit 1
fi

cd "$OPENSSL_DIR"

make clean || true

./Configure android-arm64 -D__ANDROID_API__="$ANDROID_API" --prefix="$INSTALL_DIR" no-dso no-shared no-docs

make -j$(nproc)

make install

echo "OpenSSL successfully built and installed at $INSTALL_DIR"
echo "Headers: $INSTALL_DIR/include"
echo "Libraries: $INSTALL_DIR/lib"