FLYING

/* TODO: 気の利いた説明を書く */

Eclipse先生に「Unresolved Inclusion」と怒られないAndroid NDKのセットアップ方法

最新のCDT Plugin/ADT Plugin/Android SDK/Android NDKの組み合わせで「Unresolved Inclusion」のエラーが多発するので、その解決方法をメモ。結論から言うと、単体のEclipseにCDT Pluginをインストールし、ある箇所の設定を変更した上でADT Plugin/Android SDK/Android NDKをインストールすれば解決する。

以下にWindows環境での具体的な手順を載せる。Macでも同様の手順でインストール可能だと思われる。

1. Eclipseの導入

公式からEclipse Classicをダウンロードして適当な場所に配置する。今ならJuno(Version 4.2.x)でイイと思う。

2. CDT Pluginの導入

Eclipseを起動し、Help→Install New Software……を実行。「Work with」の欄で「Juno」を選び、下のパッケージ一覧からProgramming Language→C/C++ Development Toolsにチェックを入れてインストール。再起動を求められるので再起動する。

3. 設定の変更

ここが(たぶん)重要。

EclipseのメニューからWindow→Preferencesを開き、C/C++のセクションにある「Property Pages Settings」を表示する。「Display "Preprosessor Include Paths" tab and enable language settings providers」のチェックを外す。この部分がCDTの最近のバージョンで追加された機能で、Android NDKとの相性がよくないようだ。

チェックを外したら必ず「Apply」を押しておく。

4. Android SDK/NDKの導入

公式からAndroid SDKをダウンロードする……のだが、いきなり「Download the SDK」のボタンを押さずに「USE AN EXISTING ONE」のセクションを開き、「Download the SDK Tools for Windows」を選ぶ。これでEclipseが同梱されていない単体のSDKをダウンロードできる。ダウンロードが完了したら、インストーラを実行してインストールする。

併せてNDKをダウンロードして適当な場所に配置する。通常の手順と同様、各プラットフォーム用のものを選べばOK。

5. ADT Pluginの導入

CDT Pluginの導入と同じ手順でInstall New Software……を開き、「Work with」の欄に「https://dl-ssl.google.com/android/eclipse/」を入力してAddする。表示用の名前を聞かれるので、適当に「ADT」とかにしておく。下の欄にDeveloper ToolsとNDK Pluginsが表示されるので、両方にチェックを入れてインストール。再起動を求められるので再起動する。

再起動したら、Window→Preferencesを開きAndroid SDK LocationとNDK Locationを正しく設定する。

ここまでで開発環境の導入は完了。以降、「Add Native Support」でNDK対応化したAndroidプロジェクトでは「Unresolved Inclusion」のエラーは発生しない(はず)。既に「Add Native Support」して「Unresolved Inclusion」な状態になっているプロジェクトについては、次の手順で一旦通常のAndroidプロジェクトに戻した後、再度「Add Native Support」する。

6. Remove Native Support

事前にプロジェクトのjni以下のフォルダをバックアップし、Eclipseを終了しておく。プロジェクトの.cprojectファイルとbinフォルダの中身を削除し、下記のように.projectファイルの中身を編集する。

  • buildSpec要素のうち、子のName要素が「org.eclipse.cdt」で始まるものを削除。
  • nature要素のうち、値が「org.eclipse.cdt」で始まるものを削除。

編集したら、Eclipseを起動する。該当プロジェクトが通常のAndroidプロジェクトに戻っているのを確認し、改めて「Add Native Support」を実行する。最後にバックアップしたjniフォルダの中身を新しいjniフォルダにコピーすれば完了。