FLYING

〈全日本・紀文豆乳飲料シリーズ「麦芽コーヒー」の500ミリリットルパックを扱う小売店が少ないことに遺憾の意を表明する会〉活動記録

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フォルダにコピーすれば完了。