C / C++ コードを Android プロジェクトに追加するには、プロジェクト モジュールの cpp ディレクトリにコードを配置します。プロジェクトをビルドすると、このコードがネイティブ ライブラリにコンパイルされ、Gradle で APK にパッケージ化できるようになります。Java または Kotlin コードでは JNI(Java Native Interface)を介してネイティブ ライブラリの関数を呼び出すことができます。JNI フレームワークの使用方法について詳しくは、Android での JNI に関するヒントをご覧ください。
Android Studio は、クロス プラットフォーム プロジェクトに適した CMake と、ndk-build をサポートしています。ndk-build は CMake より高速ですが、サポート対象は Android のみです。現時点では、CMake と ndk-build の両方を同じモジュール内で使用することはできません。
既存の ndk-build ライブラリを Android Studio プロジェクトにインポートする場合は、Gradle をネイティブ ライブラリ プロジェクトにリンクさせる方法をご覧ください。
このページでは、必要なビルドツールを搭載した Android Studio のセットアップ方法、C / C++ のサポートを使用して新しいプロジェクトを作成する方法、プロジェクトに新しい C / C++ ファイルを追加する方法を説明します。
既存のプロジェクトにネイティブ コードを追加する場合は、次の手順を行う必要があります。
-
新しいネイティブ ソースファイルを作成して、Android Studio プロジェクトに追加します。
- すでにネイティブ コードがある場合や、ビルド済みネイティブ ライブラリをインポートする場合は、この手順をスキップしてください。
-
ネイティブ ソースコードをライブラリにビルドするように CMake を設定します。このビルド スクリプトは、ビルド済みライブラリやプラットフォーム ライブラリに対してインポートやリンクを行う際にも必要になります。
CMakeLists.txt
ビルド スクリプトが存在する既存のネイティブ ライブラリを使用する場合や、ndk-build を使用してAndroid.mk
ビルド スクリプトを組み込む場合は、この手順をスキップしてください。
- CMake または ndk-build スクリプト ファイルへのパスを指定して、Gradle を設定します。Gradle はこのビルド スクリプトを使用してソースコードを Android Studio プロジェクトにインポートし、ネイティブ ライブラリ(SO ファイル)を APK にパッケージ化します。
プロジェクトを設定すると、JNI フレームワークを使用して Java または Kotlin コードからネイティブ関数にアクセスできるようになります。実行アイコン をクリックするだけで、アプリをビルドして実行できます。
注: サポートが終了した ndkCompile
ツールを既存のプロジェクトで使用している場合は、CMake または ndk-build を使用するように移行する必要があります。詳しくは、ndkCompile から移行する方法をご覧ください。
試験運用版の Gradle ユーザーの皆様へ: ネイティブ プロジェクトですでに CMake または ndk-build を使用している、Gradle ビルドシステムの安定版を使用したい、アドオンツール(CCache など)のサポートを必要としている、のいずれかに当てはまる場合は、プラグイン バージョン 2.2.0 以降に移行し、CMake または ndk-build を使用してネイティブ ライブラリをビルドすることをご検討ください。 こうした条件に当てはまらない場合は、引き続き試験運用版の Gradle と Android プラグインを使用できます。
NDK とビルドツールのダウンロード
アプリ用のネイティブ コードをコンパイル、デバッグするには、次のコンポーネントが必要です。
- Android NDK(Native Development Kit): Android で C / C++ コードを使用するためのツールセット。NDK のプラットフォーム ライブラリを使用することで、ネイティブ アクティビティを管理し、センサーやタップ入力などの実機のコンポーネントにアクセスできるようになります。
- CMake: Gradle と連携してネイティブ ライブラリをビルドする外部ビルドツール。ndk-build のみを使用する予定の場合は、このコンポーネントは不要です。
- LLDB: Android Studio でネイティブ コードをデバッグする際に使用するデバッガ。
こうしたコンポーネントのインストールについては、NDK、CMake、LLDB のインストールと設定をご覧ください。
C / C++ のサポートを使用した新しいプロジェクトの作成
ネイティブ コードのサポートを使用した新しいプロジェクトの作成は、他の Android Studio プロジェクトの作成に似ていますが、次の追加の手順を行う必要があります。
- ウィザードの [Choose your project] で、プロジェクト タイプとして [Native C++] を選択します。
- [Next] をクリックします。
- ウィザードの次のセクションで、他のすべてのフィールドに入力します。
- [Next] をクリックします。
- ウィザードの [Customize C++ Support] の [C++ Standard] でプロジェクトをカスタマイズできます。プルダウン リストでは、使用する C++ の標準化を選択します。[Toolchain Default] を選択すると、CMake のデフォルト設定が使用されます。
- [Finish] をクリックします。
Android Studio で新しいプロジェクトの作成が完了したら、IDE の左側の [Project] ペインを開き、[Android] ビューを選択します。図 2 に示すように、Android Studio に cpp グループが追加されます。
図 2.Android ビューのネイティブ ソースのグループと外部ビルド スクリプトのグループ
注: このビューではディスク上の実際のファイル階層は反映されておらず、プロジェクト内を移動しやすいように類似のファイルがグループ化されています。
cpp グループには、プロジェクトに含まれているすべてのネイティブ ソースファイル、ヘッダー、CMake または ndk-build のビルド スクリプト、ビルド済みのライブラリがあります。新しいプロジェクトでは、Android Studio によってサンプルの C++ ソースファイルである native-lib.cpp
が作成され、アプリ モジュールの src/main/cpp/
ディレクトリに配置されます。このサンプルコードには、「Hello from C++」という文字列を返す簡単な C++ 関数 stringFromJNI()
が記述されています。プロジェクトにソースファイルを追加する方法については、新しいネイティブ ソースファイルの作成方法についてのセクションをご覧ください。
build.gradle
ファイルで Gradle にアプリのビルド方法を指示するのと同様に、CMake と ndk-build はビルド スクリプトでネイティブ ライブラリのビルド方法を確認する必要があります。新しいプロジェクトでは、Android Studio によって CMake ビルド スクリプトである CMakeLists.txt
が作成され、モジュールのルート ディレクトリに配置されます。このビルド スクリプトの内容について詳しくは、CMake の設定をご覧ください。
サンプルアプリをビルドして実行する
実行アイコン をクリックすると、Android デバイスまたはエミュレータにテキスト「Hello from C++」を表示するアプリが Android Studio によってビルドされ、起動されます。ここでは、サンプルアプリをビルドして実行する際に発生するイベントの概要を説明します。
- Gradle が外部ビルド スクリプトの
CMakeLists.txt
を呼び出します。 - CMake がビルド スクリプトのコマンドに従って C++ ソースファイルの
native-lib.cpp
をコンパイルして共有オブジェクト ライブラリを生成し、libnative-lib.so
という名前を付けます。次に、Gradle がこのライブラリを APK にパッケージ化します。 - 実行時にアプリの
MainActivity
がSystem.loadLibrary()
を使用してネイティブ ライブラリを読み込みます。これで、ライブラリのネイティブ関数であるstringFromJNI()
をアプリで使用できるようになりました。 MainActivity.onCreate()
がstringFromJNI()
を呼び出し、返された「Hello from C++」でTextView
を更新します。
注: Instant Run は、ネイティブ コードで記述されたプロジェクトのコンポーネントと互換性がありません。
Gradle がネイティブ ライブラリを APK にパッケージ化したことを確認するには、APK Analyzer を使用します。
- [Build] > [Build Bundles(s) / APK(s)] > [Build APK(s)] を選択します。
- [Build] > [Analyze APK] を選択します。
app/build/outputs/apk/
ディレクトリで APK を選択し、[OK] をクリックします。- 図 3 に示すように、APK Analyzer ウィンドウの
lib/<ABI>/
の下にlibnative-lib.so
が表示されます。図 3. APK Analyzer を使用してネイティブ ライブラリを特定します。
ヒント: ネイティブ コードを使用する他の Android アプリで試す場合は、[File] > [New] > [Import Sample] をクリックし、[Ndk] リストからサンプル プロジェクトを選択します。
新しい C / C++ ソースファイルの作成
既存のプロジェクトに新しい C / C++ ソースファイルを追加する手順は次のとおりです。
- アプリのメイン ソースセットに
cpp/
ディレクトリをまだ作成していない場合は、次の手順で作成します。 - IDE の左側にある [Project] ペインを開き、プルダウン メニューの [Project] ビューを選択します。
- your-module > src に移動し、main ディレクトリを右クリックして、[New] > [Directory] を選択します。
- ディレクトリ名として「
cpp
」と入力し、[OK] をクリックします。 cpp/
ディレクトリを右クリックし、[New] > [C/C++ Source File] を選択します。- ソースファイルの名前(
native-lib
など)を入力します。 - [Type] プルダウン メニューで、ソースファイルのファイル拡張子(
.cpp
など)を選択します。- その他のファイル形式(
.cxx
や.hxx
など)をプルダウン メニューに追加することもできます。その場合、「ファイル形式を編集」アイコンをクリックします。ポップアップ表示された [C/C++] ダイアログ ボックスの [Source Extension] プルダウン メニューと [Header Extension] プルダウン メニューで別のファイル拡張子を選択し、[OK] をクリックします。
- その他のファイル形式(
- ヘッダー ファイルを作成する場合は、[Create an associated header] チェックボックスをオンにします。
- [OK] をクリックします。
新しい C / C++ ファイルをプロジェクトに追加した後、CMake の設定でそれらのファイルをネイティブ ライブラリに含める必要があります。
参考情報
アプリでの C / C++ コードのサポートについて詳しくは、以下のリソースをご覧ください。
Codelab
- Android Studio での Hello-CMake の作成コードラボでは、Android Studio の CMake テンプレートを使用して Android NDK プロジェクトの開発を始める方法が紹介されています。