Android NDK cross-compile
津路です。
今回は、Android NDKについて取り上げます。
基本的に、NDKでは、Android.mkとApplication.mkを作成して、ndk-buildでビルドする方法と、CMakeLists.txtを作成してCMakeを使う方法があります。
どちらも、build.gradleに、作成するライブラリの場所などを教えておく必要があります。
今回、私は、既存の C++ ライブラリをターゲットのシステム対象にビルドしてみて、それをNDKプロジェクトから利用することを考えました。
Linuxで既存のC++ライブラリというと、configure, make にてビルドしますが、クロスコンパイルするには、
まず、configure する際に、ターゲットシステムを指定します。
ターゲットは、Android機種の中でも、メーカが利用している armv7a にしてみました。
解凍したディレクトリにて、./configure –help を実行し、ターゲットの指定方法を調べます。
今回の場合、–host オプションにて、armv7a-unknown-linux-androideabiを指定。
他、インストール先を指定します。
–prefix=/home/takahiro/…. などと絶対パスで指定します。
./configure –host armv7a-unknown-linux-androideabi –prefix=/home/takahiro/liblib/local
しかし、これでは、コンパイラが、linuxにインストールされているコンパイラになっちゃいますので、
それなりの設定が必要です。
まず、Android_SDKという環境変数をセット。場所は、Android Studioでsdkのインストール先です。
次に、Android_NDK ndkのインストール先です。
次に、HOST_TAG をセット。linux-x86_64 とか。
次に、TOOLCHAIN をセット。ndkのインストール先配下に、toolchainというディレクトリがあり、llvm/prebuild/$HOST_TAG/binに様々なコンパイラが提供されています。
AR, AS, CC, CXX, LD, RANLIB, STRIPなどの環境変数を指定します。
–hostで指定したターゲットが認識されたかどうか、configure してみて確認が必要です。