概要
Android用ライブラリをC++とCMakeを使ってビルドする方法を説明します。
ビルド方法
C++ファイルを追加する
ライブラリ用C++コードファイルを追加します。
今回は簡単な加算するだけの関数を追加します。
ndk_library.h
#ifndef NDK_LIB_NDK_LIBRARY_H
#define NDK_LIB_NDK_LIBRARY_H
int ndk_lib_add(int a, int b);
#endif //NDK_LIB_NDK_LIBRARY_H
ndk_library.cpp
#include "ndk_library.h"
int ndk_lib_add(int a, int b)
{
return a + b;
}
CMakeLists.txtを追加する
CMakeLists.txt
を追加します。staticライブラリで作成します。
CMakeLists.txt
cmake_minimum_required(VERSION 3.24)
project(ndk_lib)
set(CMAKE_CXX_STANDARD 17)
add_library(ndk_lib STATIC ndk_library.cpp)
ビルド
build
ディレクトリを作成してそこへ移動します。
makefile作成時にAndroid SDKに含まれているcmakeファイルを指定してビルドします。
mkdir build
cd build
ANDROID_NDK_HOME=$HOME/Library/Android/sdk/ndk/23.1.7779620
cmake \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a \
-DANDROID_PLATFORM=android-24 \
-DANDROID_STL=c++_static \
..
cmake --build .
出力
buildディレクトリ以下にlibndk_lib.a
ファイルが出力されていると思います。
llvm-objdumpでAndroid用にビルドされているか確認できます。
$ ~/Library/Android/sdk/ndk/23.1.7779620/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-objdump -f libndk_lib.a
libndk_lib.a(ndk_library.cpp.o): file format elf64-littleaarch64
architecture: aarch64
start address: 0x0000000000000000
参考