2010-11-25

[maven][Android] mavenでAndroidアプリケーション


需要があるかどうかは分かりませんが、タイトル通りのことを行いたいと思います。
提供されているSDKではAntがどうやら使われているらしい。

以下、ディレクトリ(今回はAndroid2.2を参考に)
/{ANDROID_HOME}/platforms/android-8/ant

こういう感じでAntなら公式に提供されています。

しかしながら、同じようなビルドツール(枠は超えてるかも)のMaven環境は提供されていない。

自分はAntよりもMaven派なので、Mavenで行えないかということを模索。
どうやらMavenセントラル(http://repo1.maven.org/maven2/)には、android.jarがある模様。
ということは、できるのでは無いかと考えてみた。

maven-android-plugin(http://code.google.com/p/maven-android-plugin/)というものがあるでは無いか

という訳でこいつを使って作ってみることにする。
今回の環境
MacOS X 10.6.4(WindowsではXPで試しています)
eclipse 3.6 with ADT+m2eclipse
Maven 2.2.1

eclipseやMavenの設定は割愛(個人に合わせた設定をお願いします)
eclipseを使うのは、あくまでプロジェクト構成が欲しかった&m2eclipseでmaven連携をしやすくしたい為(プロジェクト構成が作れるならeclipseを使う必要は余り無い)

では手順を進めていきます。
1. eclipseでAndroidプロジェクトを立ち上げます(Activityやパッケージやその他設定はご自由にどうぞ)←今回はデフォルトのHelloWorld
2. BuildpathからAndroidを外す
3. 1で作ったプロジェクトを右クリック→Maven→Enable Dependency Management(この時決めるGroupIDやArtifactはご自由にどうぞ)
4. そうするとpom.xmlが開くので設定を追加していく
5. 以下のようにpom.xmlを記述(重要なのは最終成果<package>と依存関係<depedency>、プラグイン<plugin>←そのままコピペで使えます)



4.0.0
Hello
Hello
apk
0.0.1-SNAPSHOT


com.google.android
android
2.2.1
jar
provided






com.jayway.maven.plugins.android.generation2
maven-android-plugin
2.5.2





com.jayway.maven.plugins.android.generation2
maven-android-plugin
2.5.2


${env.ANDROID_HOME}
8

true

true


org.apache.maven.plugins
maven-compiler-plugin
2.3.1

1.6
1.6








6. 設定が終了したら以下のコマンドでtarget配下に*.apkファイルが出来ている

7. Androidを立ち上げて、出来たものをインストールして動作すれば出来上がり

8. 注意点
・androidのスコープはprovidedにしておく(compileにすると駄目)
・maven-compilerのソースやターゲットは1.5以上にする
・環境変数のパスを設定しておく(ANDROID_HOME)
・<platform> の要素は「/{ANDROID_HOME}/plathome/android-X」のX番号が来る。Android2.2だと8になる

機会があればテストに関しても追記したいと思います。

[maven] mavenとeclipse(ver.3.5.2)のビルド結果を同一のものにする方法


表題のようなオーダーがあった。
それもjavac -c -private hoge.classの出力結果レベルで同一にしないといけない(ぉぃ


eclipseのコンパイラはjavacコンパイラと違いjdtというコンパイラ。
確か、最適化よりも高速でビルドに重点を置いてたビルダーだったはず(jikeベースだっけ?)

一方のmavenではpom.xmlにビルド設定としてmaven-compiler-pluginを使うと思うんだけど、
こいつはjavacでビルドしてしまう。

というわけでここで問題になってくるのは以下のもの
・コンパイラが違うので同一に揃える
・コンパイルオプションも同一に揃える

一つ目のコンパイラを揃える方法は意外に簡単。
mavenのビルドをjavacを使うコンパイルでは無くjdtにしてやる。
ではpom.xmlにどういう設定をしてやればいいのかというと以下に変更すればよい。
それぞれの中に記載してやればできる。

maven-compiler-pluginを使う場合





org.apache.maven.plugins
maven-compiler-plugin
2.3.2

jdt
1.6
1.6
UTF-8



org.sonatype.tycho
tycho-compiler-jdt
0.8.0






使わない場合



org.codehaus.tycho
maven-osgi-compiler-plugin

1.6
1.6
UTF-8






2つ目のコンパイルオプションも同一に揃える方法のほうはeclipseの設定を変えてやればよい。
eclipseのデフォルト設定だとクラスファイル生成時にデバッガーが使用する情報まで含めてしまう。
一方でmavenは設定をpom.xmlに記載しないとデバッガーが使用する情報を含めない。
その為差異が出てしまう。
では、どう解消するかというと
eclipseのメニューから「設定>Java>コンパイラー」を選択
クラスファイル生成にある「未使用のローカル変数を保存」のチェックを外してやる

以上の方法で表題の内容が達成できる。

2010-11-14

[AppEngine]appengine ja night #12行って来たよ

遅くなりすぎだけどまとめる。

Pythonフレームワークahaとcoreblog3の紹介

Pythonフレームワークの紹介
・Zope
MVCの導入(ロジックとテンプレートの分離)
→レンダリングが遅いという欠点
プラグイン
・DJango/Turbo gears
O/Rマッパー
Zopeより軽量
ラーニングコスト低い
・WSGI
Webアプリの標準化
コード、テンプレートとWebサーバー接続
抽象化レイヤーの仕組みを提供
・PYLONS
疎結合フレームワーク
開発手法を提供した(pasta)
既存のテンプレートとO/Rマッパーを結合

GAEはどうかというと・・・
・WSGIベース
・DJango内蔵

フレームワークの最近の傾向
・microframework
・ライブラリの自動アップデート、デプロイ手法の提供
・buildout(依存関係を解消)
→bootstrap(pythonのmavenみたいなものか?)
・CI(継続的インテグレーション)

これまでのGAE用のpythonフレームワークに無かったもの
・コントローラをクラスで実装
・webappで実装
・dispatch
・oilは軽量だけど機能が貧弱(ウィジェットやバリデータが無いなど)

フレームワークahaはというと
・フルスタック
・railsライクなルーティング,dispatch
・クラスベースコントローラ
→リクエストをハンドリングするメソッドを明示的に記述する
→CRUDフォームを作るときに利用
→テンプレートは拡張化
・Buildout
→モジュール依存性の解決
→recipe(mavenでいうとこのpom.xmlかな)の定義と実行
→ahaのインストールに使う
・Query的DBキャッシュ
→queryの結果やDBの内容をmemcacheに保存
→キャッシュ用のベースクラスを継承

CoreCMS
・GAEベースのCMS
・ahaをベースにCMS環境を提供

覚えてることをずらずら書いたけどpythonをほとんど使わないのであんまり覚えてないや(ぉぃ

ChannelAPIとMatcherAPIでつくるイベント駆動型Webアプリ

アプリ:http://goo.gl/QvWye

・ChannelAPI
プッシュ型通信サービス用API(XMPP以外のもの)

・MatcherAPI
スケーラブルなリアルタイムマッチングサービス
マッチング条件条件を独自のタスク構文で記述して登録する
エンティティやdictの内容の条件に分析しタスクで通知
数千、数万の条件を数秒でチェックして通知
DBのクエリは過去に対するクエリ、Matcherは未来に対するクエリ
大きすぎるデータは受け取ることが出来ない(数百バイト程度)
→合致したもののリストを返す
Datastoreには全く依存しない
dictの場合は事前にスキーマをを定義できる
クエリは以下のものが使え、ネスト可能
・テキストの部分一致(全文では無い)
・数値
・論理演算


Blogger Syntax Highliter