くらげ人間のパソコンカタカタメモ

くらげ人間は足がたくさんあるのでめっちゃ早くキーボードを打てるってわけ。

Android StudioのC++サポート機能(JNI/Android NDK)で、ヘッダファイルだけで使えるライブラリ(Eigenとか)を使う

前回の記事の最後に書こうと思って忘れてた部分。前回同様Android StudioC++サポート(JNI / Android NDK)でライブラリを使う時の話。
画像処理の中で行列を扱うときにEigenとかを使いたい時があると思うんだけど、そういうヘッダファイルだけで使えるライブラリを使うときのメモ。
Eigen 3.3.4を例にやってみるので他のを入れたいときはそこを置き換える。

プロジェクト内にライブラリをコピーして使うだけ。C直下とかにあるやつを使うのは、絶対パスを書いておけばすぐできるかと思ってたけど、CMakeの知識不足ですぐにはできなかった。もし見てる人がいたらやり方教えてくれたら喜びます。

直接ではないけどCMakeでAndroid向けのOpenCVを利用するを参考にしています。

新しく追加編

Android StudioC++サポートをオンにしたけど別にOpenCVは入れてない状態からヘッダファイルだけで使えるライブラリを使う時用。

ライブラリ置き場の設定

プロジェクト内にライブラリ置き場を作る。
前回の記事ではコピーしてきたものを[jniLibs]に名前変更していたけど、今回は新規作成する。[(自分のプロジェクト)] > [app] > [src] > [main] の中に新しいフォルダを作成し、名前を付ける(今回は[jniLibs]にした)。

ヘッダファイルのコピー

さっき作ったフォルダの中に適当な名前のフォルダ(今回は[eigenLib]とした)を作り[eigen_3.3.4] > [Eigen]をその中にコピーする。

CMakeListsの設定

コピーしてきたヘッダファイルを使うために[app] > [CMakeLists.txt]を編集する。
f:id:kuragehuman:20181018010148p:plain

次の文を追加する。

# Eigen Library
include_directories(${pathToProject}/app/src/main/jniLibs/eigenLib)

CMakeListsで使っているパスの変数の設定

だと思う。
[app]の[build.gradle]を編集する。

android {
    (略)
    defaultConfig {
        (略)
        externalNativeBuild {
            cmake {
                cppFlags "-std=c++11"
                arguments "-DpathToProject:STRING=" + project.rootProject.getProjectDir().absolutePath    ←追加
            }
        }
    }

前回の続き編

前回の記事OpenCVC++で使うやつの続きで作業する時用。

ヘッダファイルのコピー

前回作った[(自分のプロジェクト)] > [app] > [src] > [main] > [jniLibs]の中に、適当な名前のフォルダ(今回は[eigenLib]とした)を作り[eigen_3.3.4] > [Eigen]をその中にコピーする。[jniLibs]の中身はこんな感じになってると思う。
f:id:kuragehuman:20181018191637p:plain

CMakeListsの設定

前回同様、[app] > [CMakeLists.txt]の編集。次の文を追加する。

# Eigen Library
include_directories(${pathToProject}/app/src/main/jniLibs/eigenLib)

終わり

あとは普通にとかでインクルードできるはず。