EclipseのAndroidビルドターゲットが表示されない

EclipseAndroidプロジェクトを作成するとき、プロジェクト名を入力したあと、Androidのビルドターゲットを一覧から選択しますが、インストールされているはずのAndroidビルドターゲットが表示されませんでした。AndroidSDKを再インストールしてもだめ。でも、

> android list targets

とするとちゃんと表示されます。
ググると、「ウインドウを最大化すると幸せになれます」的なことがたくさんヒットしますが、これは古いADT向けの解決方法であって、最近のADTでは幸せになれません(もちろん試した)。
長い時間悩んだ結果の解決方法は、

> eclipse.exe -clean

でした。
もうがっかりです。

MacOSX LionにJDKをインストールする

MacOSX(10.7) LionにJDKをインストールする方法をググってみると色々な方法がヒットしたり、Javaの実行環境と開発環境を混同しているような記述も見られるので、ここに書いておきます。
Javaの開発環境(JDK)のインストールは簡単。Terminalを起動して

$ javac

とし、あとはメッセージに従うだけ。
インストールしたら、

$ java

$ javac

でヘルプが表示されればOKです。

INSTALL_FAILED_INSUFFICIENT_STORAGE

Android4.0のエミュレータで開発をしていたら突然以下の例外が発生しました。

Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
Please check logcat output for more details.
Launch canceled!

Logcatを見ても良く分からない。
Google先生に聞いてみると、皆さん困っている様子だけど、やっぱり原因が良く分からない。解決方法も、エミュレータ起動時のオプションに

-partition-size 1024

を付けたら直ったとか、作成中のアプリケーションをアンインストールしたら直ったとか様々で、解決方法も良く分からない。サイズの大きなアプリケーションを作っているわけではないので、容量が足りないということもなさそう。
色々試してみた結果、私の場合は、AVDを作り直して、デフォルトでインストールされているアプリケーションを削除したら直りました(もしかしたらデフォルトアプリケーションの削除は関係ないかもしれない)。
一応、直ったけど、原因が良く分かりません。

Macでslコマンド

MacOSX(Lion)でもslコマンドが実行できます。slコマンドは、lsコマンドをミスって、slと打った時に出てくるジョークコマンドです。もちろん標準では入ってないので、以下のような感じでインストールします。

$ curl -O http://www.tkl.iis.u-tokyo.ac.jp/%7Etoyoda/sl/sl.tar
$ tar xvf sl.tar
$ cd sl
$ make
$ sudo cp -p sl /usr/local/bin/

これで、

$ sl

とすると、こんな感じで実行されます。
f:id:chitans:20111203234744p:image
一度実行されるとCTRL+C等で中断することはできませんので、通過するまで待たなければいけません。忙しいときこそ和みます。

Android4.0でCursor使用時に例外が発生する

Android4.0で、カーソルを使用しているActivityAからActivityBに遷移して、ハードウェアの戻るボタンでActivityAに戻ったとき以下の例外が発生しました。

java.lang.RuntimeException: Unable to resume activity
java.lang.IllegalStateException: trying to requery an already closed cursor

ActivityAで、

startManagingCursor(cursor);

としていると、カーソルの管理をAndroidに委譲できるが、これが原因となっているようです。ドキュメントを見ると確かにstartManagingCursor(cursor)は、deprecatedとなっていました。

startManagingCursor(cursor)

ドキュメントには、CursorLoader()を使えと書いてありますが、カーソルの管理をAndroidに委譲していたから、例外が発生しているので、素直に自前で管理してあげれば良いようです。なので、onDestroy()で

cursor.close();

としてやると解決しました。

「はてなブログ」はじめました。

TwitterFacebook等を利用していますが、まとまった文章を書く場所がないので、はてなブログのアカウントを取ってみました。 

仕事のことから興味を持ったことやプライベートなことまでジャンルを問わず書いていきたいと思いますので、よろしくお願いします。