2013年11月4日月曜日

android-ndk インストールからテストまで

久しぶりにandroidをいじろうと思ってeclipceを立ち上げたら、アプリケーションの実行時に以下のエラーが出て動かなくなった。

 /*---------------------------------------------------------------------------*/
    failed to initialize monitor thread: unable to establish loopback connection
/*---------------------------------------------------------------------------*/

ネットで軽く調べても原因がわからんかったので、いっそのこと最初から入れなおしてやる! と奮起した。
その際に悪戦苦闘したのでメモを残しておく。

AndroidSDKインストール(ついでに日本語化も)


参考サイト
Androidアプリケーション開発環境の構築(ADTバンドル版SDK編)
Android開発をJava 7で行う
  1. AndroidSDKをダウンロードして適当なフォルダに解凍
  2. Java SE Development Kit (JDK)をダウンロード。インストール。
  3. Pleiadesをインストールして解凍
  4. 解凍したフォルダのfeaturesとpluginsのフォルダをeclipce内の同名フォルダに上書き
以上。今のSDKはeclipceが同梱されているバージョンが配布されており、昔に比べて余計な設定の必要がなくてとても楽になった。
JDKは推奨バージョンじゃない場合は「設定」からjreを追加してコンパイラ準拠レベルを推奨バージョンに変更する必要があるらしい。

AndroidNDKインストール



参考サイト
Android NDKを使った開発環境の構築
  1. AndroidNDKをダウンロードして適当なフォルダに解凍。
  2. 「設定」「Android」「NDK」からNDK Locationを解凍したフォルダに設定する
おしまい。

AndroidSDKのサンプルを実行してみる


新しい環境も整えたところで、もうようわからんエラーは出ないだろう、と意気揚々と適当なサンプルを実行。
はい、また同じエラー出ました!

 /*---------------------------------------------------------------------------*/
    failed to initialize monitor thread: unable to establish loopback connection
/*---------------------------------------------------------------------------*/

ええい! なんなのだ貴様は! と本腰入れて調査を開始。
で、仕方ないから全然読めない英語を雰囲気から読み取りつつ見つけた情報を試す。
eclipce.iniの末尾に以下の設定を追加。

/*---------------------------------------------------------------------------*/
    -Djava.net.preferIPv4Stack=true
/*---------------------------------------------------------------------------*/

動いたー! とりあえず原因までは調べてないけど動くようになったので先に進む。
あとで調べようとは思っているけど、誰か理由がわかる人がいたらよければ教えてください。

AndroidNDKサンプルを実行する


SDKも動いたところで、NDKも大丈夫だろうととりあえずGLES使っているサンプルを実行。
この時にエミュレータの「ホストGPUを使用する」の設定にチェックを入れとかないと
動かないので気をつけよう。
それから、Nexus7を使うとなぜかエミュレータが動かなくなる。別のマシンなら問題なし。なぜ?

で、この一連の作業してる時に知ったんだけど、
今のeclipceってcygwinがなくてもNDKのビルドできるのね。
プロジェクトを右クリックして「Androidツール」のサブメニューから「Add Native Support」を選択。
で、表示されたダイアログをOK。名前は変えても変えなくてもいい。
命名規則に従う形にするのが無難かな?
これだけでNDKのビルドができるようになる。

そしてついに実行。そしてさすがというべきかやはりというべきか、エラー。というか落ちた。
こういう時こそデバッガの出番だぜ! と思って起動したらこっちもエラー。なんじゃそりゃ。

/*---------------------------------------------------------------------------*/
   Unable to detect application ABI's
/*---------------------------------------------------------------------------*/

こんな感じのエラーが出てきまして。
他にもずらずら出てる大量のエラーを読み解く。

どうもAndroidManifest.xmlの設定がよろしくないっぽい。
APP_PLATFORMのバージョンとminSdkVersionが違うよ、と怒られているんだと思う。
実際minSdkVersionをAPP_PLATFORMに合わせたらこのエラーは出なくなった。

でも別のエラーで怒られた。
NDK_DEBUG=1がどうこうというメッセージが出ていたので、
プロジェクトのプロパティからビルドオプションにNDK_DEBUG=1を付けたしてやると動いた。
ちなみに後でもう一回試してみたら、オプションを付加しなくても怒られない不思議。


中途半端だけどいろいろ限界なので一回ここでやめる。
続きはまた気が向いたときに追記か新しい記事で。




/** 11/19 追記 **/

結局サンプルは動かせなかったけれど、
適当に作ったndkのプロジェクトが動くところまでは行った。
メモメモ。

参考サイト
Windows で Android NDK を使ってみる

結局デバッグはこれでもうまくいかなかった。
その原因は、なんてこったい。パスの通し忘れだった。
環境変数PATHを設定する。

/*---------------------------------------------------------------------------*/
 C:\android\android-ndk
/*---------------------------------------------------------------------------*/

実際には自分の環境のNDKを解凍したフォルダにパスを通す。
ついでにSDK周りのPATHもチェックしたらこっちは大丈夫だった。
これをやったらデバッグはできるようになった。
でも、相変わらずglesを使ったプロジェクトは落ちるし、サンプルは動かない。

どこのサイトで見たのかは忘れたけど、
エミュレータだとglesのプロジェクトが動かない、というのがあったような気がする。
GPUだかハードウェアだかがどうだか。
実機でテストしようと思ったら、持ってる端末がくそ過ぎてPCにデバイスがダウンロードできない。
glesはまたの機会に持ち越しだ! 諦めたわけじゃないよ!

んで、サンプルのほうは、どうもバージョンによる違いが出てるみたい。
サンプルによってはそもそもビルドすら通らないこともざらにある。
なので、もういっそのこと新規プロジェクトを作ってみたら、普通に動いた。
公式サンプルが信用できないってどうなのよ?

以上。
一応インストールから空のプロジェクトの実行まで。
glesは諦めたわけじゃない。諦めたわけじゃ、ないんだ。

0 件のコメント:

コメントを投稿