Drowsy Dog's Diary

any note, any thought

Eclipse から ndk-build の設定とか ADT22 でのエラーとか

| 0 comments

珍しく Android の話。
僕の知識は 2.3 くらいで止まっているのですが、超久しぶりに Android 開発環境が必要になり、
それじゃあせっかくと Eclipse をアップデートして、ADT を rev.22.0.1 にしました。
環境は Mac OSX Lion + Eclipse Juno です。

“Missing styles. Is the correct theme chosen for this layout”

そしたら、ビルドできなくなった。ぎゃー。
 

なにやらレイアウト関連で軒並みエラーになっている?と思ったら、R.java が生成されていない。gen ディレクトリがない。
res/layout/main.xml を開こうとすると、Graphical Layout 画面で
“Missing styles. Is the correct theme chosen for this layout”
みたいなことを言われている。

何度も Theme を変えたり解像度を変えたり clean しては API レベルを変え。。と、散々やってたのですが、
結局のところ下記に答えがありました。

Eclipse ADT 22 のバージョンアップでは Android SDK Manager のアップデートは 2 回する。|SLUMBERS
http://slumbers99.blogspot.jp/2013/05/eclipse-adt-22-android-sdk-manager-2.html

結局、rev.22 にすることで、SDK Manager の更新ターゲットに “Android SDK build tools”というのが表れるので、もう一度そのインストールをしなければならないという話らしい。

このツールをアップデートして、Clean → Build で無事にビルドできるようになりました。ふー。

ndk-build設定

お客さんに聞いて初めて知ったのですが、、ADT.20 あたりから、Eclipse から JNI のビルドができるとのことで。
その設定メモです。
確かに JNI の更新っていつも、ターミナルで ndk-build → Eclipse で Clean & build… を毎回やっていたので、かなり煩わしさが減りますね。

まず、JNI ソースを含むプロジェクトのプロパティを開きます。
“Builders”の項目を選択。
eclipse_project_builder
“New” ボタンで新規のコンフィグを追加し、”Program”を選びます。

そうすると Builder の設定画面が開くので、適当に名前を付けて、
ndk-build のパスと、Work Directory を設定。これはカレントのプロジェクトのディレクトリを選びます。

さらに、今回の JNI コードが外部の C++ ライブラリをリンクするので、Arguments の欄に、LOCAL_LDFLAGS と、アーキテクチャを指定してあげます(本当は全アーキを一気に更新したいんだが、その方法がよくわからず。。)。
通常は(コマンドラインで $ ndk-build を叩いているだけなら)ここは空白でいいはずです。

また、ビルドの詳細をコンソールに表示するために、”V=1″オプションを追加しています。
buiilder_property
ビルドの設定はこれで OK。

続いて、”Refresh”のタブを選び、”Refresh resources upon completion” にチェックして、
“Specify Resources” で、カレント以下の “libs” を選択します。これでビルドの後に libs ディレクトリを更新してくれます。
ただし、libs ディレクトリは ndk-build の際に生成されるので、まだ存在しない場合は一度コマンドラインから ndk-build を実行してやるとよいです。
builder_refresh

さらに、”Build Options” のタブを選び、”Specify working set of relevant resources” をチェック。
これもボタンからファイルパスを選択し、カレント以下 “jni” にチェックを入れます。
こうすることで、jni 以下のファイルが更新されたときにも自動でビルドを実行してくれます。
builder_options


Author: kazoo

犬はさよならを言わないのだ。

コメントを残す

Required fields are marked *.