2013/11/21

MultiSelectListPreference にバグがあり、勝手に選択解除されることがある

Android の MultiSelectListPreference、便利なのですが致命的なバグがあることがわかりました。
以下のような手順で操作をすると、勝手に選択が解除されます。
場合によっては Preference の内容も書き換えてしまいます。

この問題は少なくとも 4.1.1_r1 で直っています。
2013/11/16

Eclipse に .project の無い既存の Android プロジェクトをインポートする

@Eclipse Juno SR2
@ADT Rev. 22.3
@Android SDK Rev. 19

以前、「Eclipse に既存の Android プロジェクトをインポートする」というエントリで以下のように書きました。

.project ファイルがない場合は何も表示されません。その場合は、Eclipse でインポートできるサンプル等ではないので、別の方法で Eclipse に取り込んでやる必要があります。

その後、「別の方法」が提供されたので書いておこうと思います結構すぐに出来るようになったのですが、書こうと思いながら大分時間が経ってしまいました…。

File → New → Other...

Android → Android Project from Existing Code

Root Directory を入力

選択したディレクトリを再帰的に検索してプロジェクト一覧が表示されます。
この時、プロジェクト名は AndroidManifest.xml 内で宣言されているアプリ名になります。
別の名前にしたい場合は、ここで変更することも可能です。

Finish を選択すると、選択したプロジェクトがインポートされます。

2013/11/14

Android SDK をアップデートしたら BufferOverflowException が出るようになった

最近、ちょっと古い Android Project を Eclipse で実行しようとすると以下のようなエラーが起こるようになりました。

Android Console の出力
[2013-11-14 22:04:14 - Dex Loader] Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
[2013-11-14 22:04:14 - LifeCycleTest] Conversion to Dalvik format failed: Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.

調べてみると、Eclipse を再起動してみろとか、いろいろ書かれているのですが…

私の環境では再起動してもダメで、以下のように Project Build Target を最新にしてやるとうまく動くようになりました。

Project → Properties → Android → Project Build Target


エラーの内容からすると、生成された dex ファイルに問題がある様子。
ということは、Build に失敗しているわけで、心当たりを探してみると、一つ思い当たることが。

先日、Android SDK のバージョンを 19Android 4.4 KitKat にした時に、古い Android SDK Build-tools を全て Delete したのです。
Android SDK Build-tools Rev. 19 以外が Not installed


時間が無くて調べきれていませんが、対応する Android SDK Build-tools が無いと、正しく dex ファイルが生成できないのではないかと思われます。


追記
ちょっと気になったので確認してみましたが、結論としては Android SDK Build-tools は関係なく、現時点(2013/11/14) の最新SDK Android SDK Tools Rev. 22.3
Android SDK Platform-tools Rev. 19
では Project Build Target が API 15Android 4.0.3 以前の Project のビルドにはことごとく失敗します。
Android SDK をアップデートしたら、Project Build Target もアップデートしないといけないようです。

そもそも、Project Build Target のバージョンはなるべく最新に保ち、Deprecated なものなどに気を配って開発していくべきですので、あまり問題はないと思いますが、リリース直前の複数のプロジェクトを抱えているとやっかいなことになりそうです。
まぁ、そういう場合は SDK のインストールディレクトリから分けるべきなのでしょう。。。

2013/10/02

Android Layout の Lint を個別に表示しなくする方法

ADT (Android Development Tools) の Lint、どんどん進化してきて便利ですね。
しかし、"Nested weights are bad for performance" のように修正不可能なものもあります工夫次第で修正できる場合もありますが。

この Lint、「Java のコード内で表示された場合はアノテーションで無視することが出来るけど、Layout XML 内では個別に無視できない」と思っていました。
昨日までは。

しかし、Warning が表示されている行で Ctrl + 1 を押すとなんと、"Add ignore 'NestedWeights' to elemnt" というサジェストが表示されるではないですか。

選択してみると、以下のように tools:ignore="NestedWeights" が追加され Warning が表示されなくなりました。

この機能、どうも ADT 17 で入ったみたいですADT 17 が出たのが 2012年3月 なので、1年半も気づかなかったわけですね…
ぐぅ
。

2013/10/01

Eclipse CDT 上で Android NDK を使って実行ファイルを作成する方法

Android 用の実行ファイルを Eclipse CDT で作成する方法を書いておきたいと思います。
Android プロジェクトの中に実行ファイルを作成することも可能で、そちらの方が簡単です。
この記事は、「独立したバイナリ作るのに Java との混合プロジェクトを作るなんて気持ち悪い。」って思う人向けですそうそう居まい。