前々回、前回とOpenGL環境を構築してきましたが、C/C++を利用するにあたっては思っている以上に環境構築が手間取りました。
近年はIDEやスクリプト言語を利用することが多いため、ビルドやコンパイル周りの知識のなさにがっかりです。基礎がないとちょっとした応用すらできないなと反省しきりです。
ということで、もう少しAndroid StuidoでC/C++の利用方法を調べます。
環境
Android2.2を利用します。
Mac OSx10.10
プロジェクト作成
前回同様、"include C++ Support"のチェックを入れて作成します。
次にC/C++のビルド環境を設定します。
ビルドはCMakeで
Android StudioではC/C++のビルド環境設定は複数あるようです。詰まるの大体ここかと思います。
今回はAndroid2.2のデフォルトのCMakeを利用してビルド環境を構築します。
これが一番簡単でした。
C/C++のビルド方法はいろいろあるので、興味があれば是非確認してみてください。より深く理解できます。
ちなみにCMakeとは
CMakeはコンパイラに依存しないビルド自動化のためのフリーソフトウェアであり、様々なオペレーティングシステムで動作させることもできます。
CMakeLists.txtの編集
デフォルトでcppディレクトリにnative-lib.cppファイルがあると思います。
ここがエントリープログラムになります。
ビルドの設定はCMakeLists.txtに記述します。一旦全て消して、最小構成で追記していきます。
# CMake version
cmake_minimum_required(VERSION 3.4.1)
# Add library
add_library(
native-lib
SHARED
src/main/cpp/native-lib.cpp
)
# log
find_library(log-lib log)
# リンク設定
target_link_libraries(
native-lib
${log-lib}
)
自作コードを追加する
テストコードとして、AndroidのLog出力を、C/C++側から実行します。
cppディレクトリ内に適当にディレクトリを作ります。
例えば"log"としましょう。
CMakeの便利な所は、自作コード用のビルド設定を別のCMakeLists.txtファイルに記述することができます。
プログラムファイルが如何にあるとすると
cpp/log/log.cpp
同一改装などに新しいCMakeLists.txtを配置します。
cpp/log/CMakeLists.txt
CMakeLists.txtは以下のとおりです。
# CMake version
cmake_minimum_required(VERSION 3.4.1)
# .hファイルがあれば、パスを指定します。
include_directories(
./log/include
)
# Add cpp files
add_library(
mylog
STATIC
./log/log.cpp
)
これでlogディレクトリ内のビルド設定はできたので、これをnative-lib側にひも付けます。
# Add Sub Directory
add_subdirectory(src/main/cpp/log)
add_subdirectoryで自作コードのパスを設定します。
あとは、リンク設定を入れればOKです。
target_link_libraries(
native-lib
mylog
)
これでひも付けもOKです。無事にビルドができることが確認できると思います。
ちなみにLog出力のコードは
#include <android/log.h>
__android_log_print(ANDROID_LOG_INFO, "識別子みたいなもの?適当に設定してください。", "%s\n", val.c_str());
これでINFOで表示できます。
第一引数は、ANDROID_LOG_DEBUG、ANDROID_LOG_ERRORなどもあるので、適宜設定してください。
OpenGLのビルド設定
native-libのCMakeLists.txtに以下を追記してください。
# Setup OpenGL
add_definitions("-DDYNAMIC_ES3")
set(OPENGL_LIB GLESv2)
target_link_libraries(
native-lib
${log-lib}
${OPENGL_LIB}
)
これでOpenGLの関数を実行できると思います。