Help us understand the problem. What is going on with this article?

VisualStudioでAntを使ってNativeなAPKを作ってみる

More than 1 year has passed since last update.

※2019/11/13 Gradle版の記事もアップいたしました。詳しくは こちら をご御覧ください。

はじめに

CEDEC2019 の「玄人向けAndroid/iOS対応エンジン 開発レポート」というセッションにて VisualStudioでもGradleを使ったNativeアプリが作れるという話を聞きました。
かなり前から私がやりたかったことでしたので早速試してみました。

ブレイクポイントが止まらない

VisualStudioとGradleで色々試しNativeアプリは作れましたが、どうやってもブレイクポイントが止まりませんでした。
これではVisualStudioの旨味がかなり減ってしまいます。
ということで違う方法を模索しました。

VisualStudioとAnt

NativeActivityも試してみましたが、Android向けの広告などがJavaのライブラリの物が多くC++オンリーでの開発はかなり不向きな環境でした。
複数のプラットフォームに対応する上でVisualStudioで開発できることが私の環境では望ましかったため、VisualStudio上のAntで開発する方向で落ち着きました。

開発環境

  • OS : Windows 10
  • Visual Studio 2017 Professional

プロジェクトの準備

1. Antプロジェクトの作成

Android」という名前でプロジェクトを作っています。
00.gif

2. Sharedライブラリ用のプロジェクトの作成

Shared」という名前でプロジェクトを作っています。
01.gif

3. Sharedライブラリをantプロジェクトに紐付ける

02.gif

この段階でソリューションのビルドを行い、ビルドが通れば設定完了です。

JNIで繫いで動作確認

ここからはJavaとNativeを繫いでブレイクポイントが止まるか確認してみます。
2つのファイルに下記コードを追記します。

Android.java
public class Android extends Activity
{
    // 追記
    static {
        System.loadLibrary("SharedProject");
    }
    native void NativeTest(int value);

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        /* Create a TextView and set its text to "Hello world" */
        TextView  tv = new TextView(this);
        tv.setText("Hello World!");
        setContentView(tv);

        // 追記
        NativeTest(123);
    }
}
Shared.cpp
extern "C" {
    // 追記
    JNIEXPORT void JNICALL Java_com_Android_Android_NativeTest(JNIEnv* env, jobject, jint value)
    {
        LOGI("test [%d]", value);
    }
}

動作確認

上記を追記したらAndroid端末とPCを繋ぎ、実行してみます。
03.gif

ブレイクポイントを貼ったところで止まり、変数の中身が見えていることが確認できました。

まとめ

VisualStudio & Gradle で開発ができるのが理想ですが、どうしても難しい場合は VisualStudio & Ant でも行けそうです。
VisualStudio & Gradle でもブレイクポイントがうまく止まったらまた記事にしてあげようと思います。
VisualStudioでAndroidのNative開発している文献があまりにも少ないのでもう少し世の中に増えていくといいなと思いました。

furui
しがないゲームプログラマーです。 備忘録っぽいものが作れればと思っております。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away