Androidの開発でC++のコードを使うには

最後の更新からずいぶんと日が空いてしまいました。久しぶりの更新です。
英語のアウトプットの方はMy Teacherが別のところでCheckしてくれることになったので、こっちは昔の感じで再構築していこうかと思います。
やっぱり英語+ITの話題となると、ちょっと敷居も高くなっちゃってなかなか手が動かなかなったんですが、ただの英語の日記だとわりとサクサクと書けますね。それに添削もしてくれるのでやりがいもあると。
閑話休題。

再構築の1発目はAndroid。
Androidでググっていると、ネイティブコードとかいう言葉をよく目にすることがあるかもしれません。
C/C++がそれにあたるそうです。

使い方ですが、Android StudioのSDKツールでLLDB、CMake、NDKという3個のコンポーネントを追加してください。
横着な人はプロジェクト作成のときにこの部分

Include C++ Suportにチェックを入れて作業を進めて行くと、〇〇がないからインストールしなよ!
って出て来るので、それで入れて進めても大丈夫です。

さて、MinimumSDKとかどうしよかなーとか悩むとこですが、テストなのでそれは置いておいてドンドン進めて行くと、普段見ないファイルが少し増えているぞと。


cppディレクトリにnative-lib.cpp、External Build FilesにCmakeLists.txt というファイルがあるね。

C/C++を使う方法ですが、ndk-build(古い)を使う方法とCMake(新しい)を使う方法があるようで、今回はCMakeを使う方法です。
これらの具体的な仕組みは分かりませんが、これをつかって規則に沿って進めていけばうまくビルドしてくれるようです。
便利なもんだ。
プロジェクトが出来上がって何も手を加えずにビルドしてみてみると、native-lib.cppにあるString設定されている文字列がディスプレイに表示されていることでしょう。

いつものJavaのMainActivityを見ると

public native String stringFromJNI();

static {
  System.loadLibrary("native-lib");
}

というところがあります。nativeで宣言して、下の3行でCを呼んでる感じだね。
C++のコードはnative-lib.cppに書くとよさそうです。

では、ここで積み本になっていた技術評論社:C++クラスと継承完全制覇を取り出してC++のコードを書いてみよう。
と、その前にルールをチェックやで。

native-lib.cpp

Java_net_tjapps_testc_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {

メソッドはこの形式で、第1引数、第2引数はこれで固定らしい。追加は第3から。
あとはDEMO?というか作りたてのコードにあったようにC++内部ではstd::stringで、返す時にはJstring。
これはStringだけども、このような感じのルールらしい。
プロジェクトを生成してできるコードを見るとそのようになっています。

では技術評論社:C++クラスと継承完全制覇のList1-1のコードから抜き出してビルドします。

#include <jni.h>
#include <string>

extern "C"
JNIEXPORT jstring JNICALL
Java_net_tjapps_testc_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {

    struct Jugyoin {
        int number;
        char shimei[80];
        long kyuyo;
    };

        struct Jugyoin tanaka;

        tanaka.number = 1234;
        strcpy(tanaka.shimei, "田中一郎");
        tanaka.kyuyo = 200000;

        return env->NewStringUTF(tanaka.shimei);
}

こんな感じになっています。
ビルドすると

出たけどちょっと寂しい。
ではこの勢いでC++の勉強をしていこうと思います。
せっかく本買ったしなあ、とけっこう貧乏性なんだな。

参考にしたサイト
させす技術メモ(自家用)Android Studio 2.2でC++のコードを使う
hcreer’s diary Android Studio NDKを使う

Similar Posts:


Leave a Reply

Your email address will not be published. Required fields are marked *