android-maven-plugin

Maven 形式にしてみたり、ADT 形式にして Ant で頑張ってはみたもののイマイチパッとしない Android 開発環境との戦いは続いております。

さて、何とか Good Practice が見えてきて、どうも Eclipse での開発時は ADT 形式で、CI 環境で動かす為だけに Maven 形式でやるのがいいみたい。
なんで全部 Maven 形式ではうまくいかないのかというと、android-maven-plugin がイマイチなのが原因。

Maven のモジュール形式でアプリとライブラリの構成だと通常ライブラリ側の参照をプロジェクトでも、リポジトリでも同様に動作するんだけど、android-maven-plugin の場合はバイナリ(リポジトリ)参照でないとアプリのテストプロジェクトの apk が正しく作成されないみたい。

書きかけ

JSON library

JSON のライブラリをまさぐってみた。

対象は以下の3つ

結論は

JSONIC 使い安いしとっかかり易い。Jackson もまぁまぁ。JsonPullParser は僕の環境では上手くコード生成ができなかった。

気づいた点は以下の通り。

  • JSONIC は JSON ファイル内の要素名を勝手にキャメルケースで自動で変換して、扱ってくれる。
  • JSONIC はインナークラスでもマッピングができた。Jackson はインナークラスだと「No suitable constructor found for type」といわれてエラーになる。
  • JSONIC と Jackson は使いやすさ的にはあんまり変わらない。Jackson はマッパーオブジェクトを毎回生成するのがちょっと面倒臭いかも。

ADT のいけてないところ

近頃 ADT で開発すること(つまり、Android のアプリ開発)が多いんですが、ADT のできの悪さ(というか、こころ遣いのなさ)にイライラするのでここに挙げてみました。

  • ビルドツールが Ant である。Ant が悪いわけではなく用途としては Maven の方が適していると思う。ライブラリのモジュール管理とかわざわざ Ivy 使わないとできない。
  • ライブラリプロジェクトを使ってアプリケーションを分割することができるが、ライブラリプロジェクトを参照する際にソース、Javadoc が参照できない。

maven-android-plugin

Android の開発にあたって、Maven で管理したかったので、色々と探した結果、プラグインを見つけて試してみるといい感じだったので、使い始めたんですが、どうもライブラリプロジェクトを参照する場合ソースの添付ができないみたい。

これは痛い。ローカルでライブラリを同時に開発している場合でもソースが参照できないのは痛すぎる。

どうも、Android のライブラリでは Maven 上では jar でなく、apk になってるみたいで、apk だとどうもバイナリ参照担っている。なんでバイナリ参照になっているか確認すると、Android Dependencies のなかで、ライブラリのソースが /gen のみになってる。これが原因なんだけど、この設定がいじれない。

だめだ。まだ使えない感じね。

http://code.google.com/p/maven-android-plugin/

OSX の環境変数

OSX で環境設定を ~/.profile で設定していたんだけど、ターミナルを使わないアプリケーションから環境変数を参照するとどうも参照できなくて困った。

~/.profile で設定した環境変数はターミナル起動した時に評価されるので、それはその通りだと納得。では他のターミナルを経由しない場合に参照できる環境変数はどのように設定すべきかというと /etc/launchd.conf で記載するのがいいみたい。

OSX のターミナルで Windows のホスト名から IP アドレスを引く

Windows のクライアントに Subversion 入れて OSX とドキュメント共有しているんだけど、Windows の IP アドレスが DHCP で変動するので、定期的に samba の net コマンドでホスト名から IP アドレスを引いてきて、/etc/hosts に追加しているんだけど、Lion にアップグレードしてから上手いこと IP アドレスが引けてないのでおかしいなぁと思っていたら、どうも Apple 独自の samba になったせいで net コマンドが使えなくなってるみたい。

smbutil っていうコマンドが代替みたいなので、それに変更

Snow Lepard

Lion

DynamoDB の リージョンを設定する。

ぱっと見た感じメソッドなかったからちょっと迷った。リージョンはどうも Endpoint っていうみたい。どうりで Region で検索しても引っかからないわけだ。

ドキュメントにきちんと記載があった。

http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/SettingUpTestingSDKJava.html

ちなみに、リージョンの一覧はいかにまとまってる。

http://docs.amazonwebservices.com/general/latest/gr/rande.html#ddb_region