LoginSignup
3
2

More than 5 years have passed since last update.

Android Studio2.2でC/C++を利用するには

Last updated at Posted at 2016-12-24

前々回前回と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の関数を実行できると思います。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2