しばらく、Android開発を怠っていたので、すっかり変わってしまったAndroid NDK 開発環境について行けてませんでした。
NDKが、AndroidStudio cmake環境を推奨するようになったので、cmakeでビルド出来る物は、なんとかなりますが、そうでないのは、面倒ですよ。
opensslなんか、独自のConfigureスクリプトなんで、環境変数設定しまくりですよね。
ということで、 openssl-3.1.4 をビルドしてみました。
開発環境は、ubuntu 22 です。 MacOSにも対応してみました。
openssl-3.1.4.tar.gz をダウンロードしてきて、適当なフォルダに展開します。
/---openssl-3.1.4
|--output <- ここにインクルードとライブラリが出来上がります。
|--build.sh
scratch.sh
#!/bin/bashrm -rf output/*cd openssl-3.1.4#TOOLCHAINexport NDKVER=26.1.10909125PLATFORMNAME=`uname -s`if [ $PLATFORMNAME = "Darwin" ]; thenexport ANDROID_SDK=~/Library/Android/SdkLLVMPLATFORM="darwin-x86_64"elseexport ANDROID_SDK=~/Android/SdkLLVMPLATFORM="linux-x86_64"fiexport NDK=${ANDROID_SDK}/ndk/${NDKVER}export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/${LLVMPLATFORM}export ANDROID_NDK_ROOT=${NDK}export MAKE=${NDK}/prebuilt/${LLVMPLATFORM}/bin/make#APIexport API=30#OPENSSLexport OUTPUT_DIR=`pwd`/../output${MAKE} cleanmake_android() {export TARGET=$1export ARCH=$2export NDKARCH=$3export CFLAGS=$4export LDFLAGS=$5#Configure and build.export AR=$TOOLCHAIN/bin/llvm-arexport LD=$TOOLCHAIN/bin/ldexport RANLIB=$TOOLCHAIN/bin/llvm-ranlibexport STRIP=$TOOLCHAIN/bin/llvm-stripexport CC=$TOOLCHAIN/bin/$TARGET$API-clangexport AS=$CCexport CXX=$TOOLCHAIN/bin/$TARGET$API-clang++export PATH=$TOOLCHAIN/bin:${PATH}./Configure \${ARCH} \${CFLAGS} \--prefix=${OUTPUT_DIR} \--with-zlib-include=${TOOLCHAIN}/sysroot/usr/include \--with-zlib-lib=${TOOLCHAIN}/sysroot/usr/lib \zlib no-asm no-shared no-unit-test${MAKE} build_generated libcrypto.a libssl.amkdir ${OUTPUT_DIR}/${NDKARCH}mv libcrypto.a ${OUTPUT_DIR}/${NDKARCH}/.mv libssl.a ${OUTPUT_DIR}/${NDKARCH}/.cp -rf include/openssl ${OUTPUT_DIR}/${NDKARCH}/${MAKE} clean}#ABI armv7amake_android armv7a-linux-androideabi android-arm armeabi-v7a "" ""#ABI aarch64make_android aarch64-linux-android android-arm64 arm64-v8a "" ""#ABI x86make_android i686-linux-android android-x86 x86 "" ""#ABI x86_64make_android x86_64-linux-android android-x86_64 x86_64 "" ""
ついでに、libsshです。
libsshは、cmakeを使います。
libsshは、opensslに依存するので、opensslをビルドしてから、includeとlibの場所を指定する必要があります。
scratch.sh
#!/bin/bash
export LIBSSH=libssh-0.10.6
#TOOLCHAINexport NDKVER=26.1.10909125
PLATFORMNAME=`uname -s`if [ $PLATFORMNAME = "Darwin" ]; thenexport ANDROID_SDK=~/Library/Android/SdkLLVMPLATFORM="darwin-x86_64"elseexport ANDROID_SDK=~/Android/SdkLLVMPLATFORM="linux-x86_64"fiexport NDK=${ANDROID_SDK}/ndk/${NDKVER}export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/${LLVMPLATFORM}export CMAKE=${ANDROID_SDK}/cmake/3.18.1/bin/cmakeexport OUTPUT_DIR=`pwd`/outputexport OPENSSL_DIR=../openssl/outputexport MAKE=${NDK}/prebuilt/${LLVMPLATFORM}/bin/make#APIexport API_LEVEL=30make_android() { NDKARCH=$1 ${CMAKE} \ -H${LIBSSH} \ -Bmakegenerate/${NDKARCH} \ -DOPENSSL_INCLUDE_DIR=${OPENSSL_DIR}/${NDKARCH} \ -DOPENSSL_SSL_LIBRARY=${OPENSSL_DIR}/${NDKARCH}/libssl.a \ -DOPENSSL_CRYPTO_LIBRARY=${OPENSSL_DIR}/${NDKARCH}/libcrypto.a \ -DWITH_EXAMPLES=OFF \ -DUNIT_TESTING=OFF \ -DBUILD_SHARED_LIBS=OFF \ -DWITH_SERVER=OFF \ -DWITH_INTERNAL_DOC=OFF \ -DANDROID_ABI=${NDKARCH} \ -DANDROID_NATIVE_API_LEVEL=${API_LEVEL} \ -DANDROID_NDK=${NDK} \ -DCMAKE_TOOLCHAIN_FILE=${NDK}/build/cmake/android.toolchain.cmake \ -DCMAKE_VERBOSE_MAKEFILE=TRUE \ -DCMAKE_C_FLAGS="-std=gnu99 -Wno-int-conversion -D__USE_GNU" \ -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_MAKE_PROGRAM=${MAKE}
cd makegenerate/${NDKARCH}${MAKE} mkdir ${OUTPUT_DIR}/${NDKARCH} mkdir ${OUTPUT_DIR}/${NDKARCH}/libssh mv src/libssh.a ${OUTPUT_DIR}/${NDKARCH}/. cp config.h ${OUTPUT_DIR}/${NDKARCH}/. cp include/libssh/libssh_version.h ${OUTPUT_DIR}/${NDKARCH}/libssh/. cd ../..}#Rebuildrm -rf makegeneraterm -rf output/*#ABI x86_64make_android x86_64#ABI armv7amake_android armeabi-v7a#ABI aarch64make_android arm64-v8a#ABI x86make_android x86





