しばらく、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/bash

rm -rf output/*

cd openssl-3.1.4

#TOOLCHAIN
export NDKVER=26.1.10909125

PLATFORMNAME=`uname -s`
if [ $PLATFORMNAME = "Darwin" ]; then
export ANDROID_SDK=~/Library/Android/Sdk
LLVMPLATFORM="darwin-x86_64"
else
export ANDROID_SDK=~/Android/Sdk
LLVMPLATFORM="linux-x86_64"
fi
export NDK=${ANDROID_SDK}/ndk/${NDKVER}
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/${LLVMPLATFORM}
export ANDROID_NDK_ROOT=${NDK}
export MAKE=${NDK}/prebuilt/${LLVMPLATFORM}/bin/make

#API
export API=30

#OPENSSL
export OUTPUT_DIR=`pwd`/../output

${MAKE} clean

make_android() {
export TARGET=$1
export ARCH=$2
export NDKARCH=$3
export CFLAGS=$4
export LDFLAGS=$5

#Configure and build.
export AR=$TOOLCHAIN/bin/llvm-ar
export LD=$TOOLCHAIN/bin/ld
export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
export STRIP=$TOOLCHAIN/bin/llvm-strip
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export AS=$CC
export 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.a
mkdir ${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 armv7a
make_android armv7a-linux-androideabi android-arm armeabi-v7a "" ""

#ABI aarch64
make_android aarch64-linux-android android-arm64 arm64-v8a "" ""

#ABI x86
make_android i686-linux-android android-x86 x86 "" ""

#ABI x86_64
make_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

#TOOLCHAIN
export NDKVER=26.1.10909125

 
PLATFORMNAME=`uname -s`
if [ $PLATFORMNAME = "Darwin" ]; then
export ANDROID_SDK=~/Library/Android/Sdk
LLVMPLATFORM="darwin-x86_64"
else
export ANDROID_SDK=~/Android/Sdk
LLVMPLATFORM="linux-x86_64"
fi
export NDK=${ANDROID_SDK}/ndk/${NDKVER}
export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/${LLVMPLATFORM}
export CMAKE=${ANDROID_SDK}/cmake/3.18.1/bin/cmake
export OUTPUT_DIR=`pwd`/output
export OPENSSL_DIR=../openssl/output
export MAKE=${NDK}/prebuilt/${LLVMPLATFORM}/bin/make
 

#API
export API_LEVEL=30

make_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 ../..
}

#Rebuild
rm -rf makegenerate
rm -rf output/*

#ABI x86_64
make_android x86_64

#ABI armv7a
make_android armeabi-v7a

#ABI aarch64
make_android arm64-v8a

#ABI x86
make_android x86

Joomla templates by a4joomla