NDK を使ってみる

NDK(Native Development Kit)は、Android で C や C++ のコードを使用できるようにするツールセットです。NDK のプラットフォーム ライブラリを活用することで、ネイティブ アクティビティを管理し、センサーやタップ入力など、実際のデバイスのコンポーネントにアクセスできるようになります。それほど経験のない Android プログラマーの場合、アプリを開発する際に必要となるのは Java コードとフレームワーク API に限られるため、通常、NDK はツールとして適していません。NDK が役に立つのは、以下のいずれかに該当する場合です。

  • 低レイテンシを実現したり、ゲームや物理学シミュレーションなど、演算負荷の高いアプリを実行したりするために、デバイスからできる限り高いパフォーマンスを引き出す必要がある場合。
  • 独自または他のデベロッパーの C / C++ ライブラリを再利用する場合。

Android Studio 2.2 以降を使用すると、NDK によって C や C++ のコードをネイティブ ライブラリにコンパイルし、Gradle(IDE の統合ビルドシステム)によってそのネイティブ ライブラリを APK にパッケージ化できます。これにより、Java コードから JNI(Java Native Interface)経由でネイティブ ライブラリ内の関数を呼び出せるようになります。Gradle と Android ビルドシステムの詳細については、ビルドを設定するをご覧ください。

Android Studio でネイティブ ライブラリをコンパイルするデフォルトのビルドツールは CMake です。また、多数の既存プロジェクトで使われている ndk-build もサポートしています。ただし、新しいネイティブ ライブラリを作成する場合は CMake を使用する必要があります。

このガイドでは、Android Studio 上で NDK の利用を開始するための手順について説明します。Android Studio のバージョンが最新でない場合は、今すぐダウンロードしてインストールしてください。

試験運用版の Gradle ユーザーの皆様へ: ネイティブ プロジェクトですでに CMake または ndk-build を使用している、Gradle ビルドシステムの安定版を使用したい、アドオンツール(CCache など)のサポートを必要としている、のいずれかに当てはまる場合は、プラグイン バージョン 2.2.0 以降に移行し、CMake または ndk-build を使用してネイティブ ライブラリをビルドすることをご検討ください。 こうした条件に当てはまらない場合は、引き続き試験運用版の Gradle と Android プラグインを使用できます。

NDK とツールをダウンロードする

アプリ用のネイティブ コードをコンパイルおよびデバッグするには、次のコンポーネントが必要です。

  • Android Native Development Kit(NDK): Android で C / C++ コードを使用できるようにするツールのセット。
  • CMake: Gradle と連携してネイティブ ライブラリをビルドする外部ビルドツール。ndk-build のみを使用する予定の場合は、このコンポーネントは不要です。
  • LLDB: Android Studio がネイティブ コードをデバッグする際に使用するデバッガ。

こうしたコンポーネントのインストールについては、NDK と CMake のインストールと設定をご覧ください。

ネイティブ プロジェクトを作成またはインポートする

Android Studio のセットアップが完了したら、C / C++ のサポートを使用して新しいプロジェクトを作成できます。ただし、既存の Android Studio プロジェクトに対してネイティブ コードの追加やインポートを行う場合は、以下の基本プロセスに沿って進める必要があります。

  1. 新しいネイティブ ソースファイルを作成して、Android Studio プロジェクトに追加します。
    • すでにネイティブ コードがある場合や、ビルド済みネイティブ ライブラリをインポートする場合は、この手順をスキップしてください。
  2. CMake ビルド スクリプトを作成して、ネイティブ ソースをライブラリにビルドする方法を指定します。このビルド スクリプトは、ビルド済みライブラリやプラットフォーム ライブラリに対してインポートやリンクを行う際にも必要になります。
    • CMakeLists.txt ビルド スクリプトが存在する既存のネイティブ ライブラリを使用する場合や、ndk-build を使用して Android.mk ビルド スクリプトを組み込む場合は、この手順をスキップしてください。
  3. CMake または ndk-build スクリプト ファイルへのパスを指定して、Gradle をネイティブ ライブラリにリンクします。Gradle はこのビルド スクリプトを使用してソースコードを Android Studio プロジェクトにインポートし、ネイティブ ライブラリ(SO ファイル)を APK にパッケージ化します。

    注: サポートを終了した ndkCompile ツールを使用している既存プロジェクトの場合は、build.properties ファイルを開き、次のコード行を削除してから、CMake または ndk-build を使用するように Gradle を設定する必要があります。

    // Remove this line
    android.useDeprecatedNdk = true
    
  4. [Run] メインメニューにあるアプリ実行用の [Run] ボタン をクリックしてアプリをビルドして実行します。Gradle が、CMake または ndk-build プロセスを依存関係として追加し、ネイティブ ライブラリをコンパイル、ビルドして APK にパッケージ化します。

実機またはエミュレータでアプリを実行したら、Android Studio を使用してアプリをデバッグできます。または、NDK とそのコンポーネントの詳細については、コンセプトのページをご覧ください。