投稿

5月, 2012の投稿を表示しています

android-bindingのライセンスについて

android-bindingのライセンスは、サイトに書いてある通りLGPLです。
http://code.google.com/p/android-binding/

AndroidアプリにLGPLのライブラリを使うことは、ソース公開の必要になる場合があるようです。

LGPLとAndroid - 近況LGPLとAndroid その2Android アプリに LGPL ライブラリを組み込むとソースコード開示義務が発生するらしい: あるSEのつぶやきLGPLに関する追記 « Code Archives

LGPLは動的リンクであれば影響を受けないという認識です。
Androidの場合は、apk、dexにLGPLのライブラリ自体を含むことになるため、影響を受けるということになるという解釈のようです。
私としては妥当だと考えています。

というわけで、LGPLを商用利用する場合は(当たり前ですけど)ソース公開の必要性などに注意が必要となります。
別にAndroidアプリに限らずですね。
ちなみに、Android自体はApache Software License, 2.0で、なぜこのライセンスなのかについて以下で記載されており、LGPLが引き合いに出されています。
Licenses | Android Open Source


話は戻ってandroid-bindingです。
Androidのライブラリなわけですが、上記のとおりLPGLのライセンスとなっています。
商用利用しにくいということで、昨年の年末にライセンス変更について提起されていました。
https://groups.google.com/group/androidbinding/browse_thread/thread/1711f6f186b6a898

提起にされているスレッドでは、MITライセンスへの変更を行うつもりとの記載がありますが、今現在(2012/5/28)LGPLのままです。
折角のいいライブラリなので広く使えるように、ぜひライセンス変更がされるといいなと思います。
いいなと思うからには、やっぱりチケット切っておかないと・・・w
http://code.google.com/p/android-binding/issues/detail?id=25

とりあえず、今回調べて作ろうと思っていたのはソース公開するからいい…

android-bindingを使ってみる その4

android-bindingを使ってみる、のとりあえず区切りです。
今回はGalleryを使います。
実装はこちら。
https://bitbucket.org/twopack/android-binding-sample/changeset/33c63d3b41e8

android-bindingのドキュメントに直接Galleryについての記載はありませんが、GalleryクラスはAdapterViewを継承していてこれについてはサポートしているのでListViewなどと同じように実装できます。
android-binding - Attributes that is (going) to be supported in Android Binding
Gallery | Android Developers


基本的に前回などにListViewで行ったのと同等の実装が可能です。
はまったところについて書いておきます。

項目のレイアウトが左寄せになる。
Galleryは選択されている項目はセンタリングされているものだと思っていたのに、なぜか左寄せに。。。
項目のレイアウトにLinerLayoutを含んでいたためでした。Galleryともandroid-bindingとも関係ないところでしたorz

selectedPositionが反映されない?
android-bindingでselectedPosition属性をバインドすると、選択されている項目の位置を取得できます。
onItemSelected属性のバインドを行って、選択項目が変わったときにその位置を表示するようなサンプルを作っていますが、selectedPositionをonItemSelected属性のInvoke()で確認すると値が更新されず、前の値のままでした。
このバインド自体はAdapterView.onItemSelected()へのバインドなので、Invoke()の引数で選択された位置を取得すればよかったようです。
bitbucketに登録したサンプルでは、この差が分かるように両方表示するようにしてあります。

android-bindingを使ってみる その3

今回はリストビューをバインドして使ってみました。
android-bindingのサンプルでも提供されていますが、以下を試してみました。
リストビューのアイテムとして複数のウィジェットを使用できること。アイテムを随時読む込んで表示するような実装が可能なこと。
android-bindingのMarkupDemoのDynamic Listsのソースを参考にしています。
http://code.google.com/p/android-binding/source/browse/#svn%2Ftrunk%2FAndroidBindingMarkupDemo

実装した結果は以下にコミットしています。
https://bitbucket.org/twopack/android-binding-sample/changeset/3136f4d0742e

リストビューのアイテムとして複数のウィジェットを使用BindingToCollection - android-bindingに書かれている ArrayListObservableを使用してリストビューに対してバインドします。
Tにはリストビューのアイテムのレイアウトに対してバインドする変数を定義したクラスを作って指定します。
ソースは以下のようなものになります。
public transient ArrayListObservable<ListViewSampleItem> listviewItems = new ArrayListObservable<ListViewSampleItem>(ListViewSampleItem.class); 対応するレイアウトのXMLは以下です。
<ListView android:layout_width="match_parent" android:layout_height="match_parent" binding:itemSource="listviewItems" binding:itemTemplate="@layout/listview_item" />
@layout/listview_itemでリストビューの項目レイアウトを定義して、そ…

android-bindingを使ってみる その2

android-bindingの続きです。
前回のソースにアクティビティの開始を追加しました。
ポイントは以下です。それぞれソースのリンクも併記します。
ViewModelのJUnitでテストできる状態を維持する。
https://bitbucket.org/twopack/android-binding-sample/changeset/6cf2bd843f36アクティビティの開始をテストする。
https://bitbucket.org/twopack/android-binding-sample/changeset/c44ee14f5722
1. ViewModelのJUnitでテストできる状態を維持する。 android-bindingのサンプルであるMarkupDemoでは、リストビューの項目をクリックした際にインテントを発行してアクティビティを開始するコードがあります。
リストビューの項目をクリックした際の処理は、Commandクラスを使用したバインドによって行われます。

layoutの中でバインドできる属性については、以下のページで記載されています。
http://code.google.com/p/android-binding/wiki/BindingSyntax


// ”onClickItem”は、layoutのbinding:onItemClickedで定義したもの。 public final Command onClickItem = new Command() { @Override public void Invoke(final View view, final Object... args) { // ここにクリック時の処理 }; };
ここで単純にインテントを発行すると、Androidの中のものを動かさないといけなくなるため、JUnitでの(エミュレータを使用しない)テストができません。
そこで、実際のインテント発行はアクティビティ側で実装し、アクティビティで実装したメソッドをViewModelに登録して呼び出すようにしました。
ViewModelとしては、登録されたメソッドの呼び出しまでは責務となるため、JUnitでテストが可能です。

2. アクティビ…

android-bindingを使ってみる その1

Androidアプリ開発での自動テストをやってみようと言う流れで、android-bindingを使ってみました。
参考のサイトを参考にしました。
より効率的に開発するために ~スマートフォン時代のソフトウェアテスト・アプローチ[Android]Android Bindingを使ってみた(1)〜(3)[Tutorial] List Views in Android Binding (1/4) 〜 (4/4)双方向Bindingが可能なAndroid Binding v0.45を使ってみたAndroid Binding Markup Demoを読み解く ~リストクリックからイベント駆動まで~
とりあえず使ってみた&テスト書いてみたというソースは以下です。Activityに記述するコード量が非常に少なくなっていると思います。
https://bitbucket.org/twopack/android-binding-sample/changeset/bb43ab2cba02

また、PojoViewModelを使うとMVVMのViewModelをPOJOにできるため、テストコードの実行時にAndroid環境へのインストールが不要になります。これはTDDを行う上でテストの実行にかかる時間が大分短くなるのでとてもいいです。

テストコードをエミュレータで動かさないと、NoClassDefFoundErrorが起きてしまいました。ここではまりましたが、エミュレータ外で動かす場合には、Eclipseで以下の設定を行いました。
Debug ConfigurationsClasspathBootstrap EntryJREを追加。 User Entriesandroid.jarを追加。Debug ConfigurationsJREEnvironment executionJavaSE-1.6を選択。Debug ConfigurationsEnvironmentSelect othr...Eclipse JUnit Launcherを選択。
やってみたのはごく簡単なものなので、メリットを享受したままで実際にどこまで有効に使えるのか、引き続き試してみたいと思います。

Androidのコーディングルール

Androidのコーディングルールについて調べたので備忘録。
Code Style Guidelines for ContributorsコントリビュータのためのAndroidコードスタイルガイドライン 日本語訳
これにまつわるツール類。 CheckStyle
Googleが定義を公開してはいないようです。
以下のページに参考にしました。
memorandum / Android CheckStyle設定

また、UnofficialながらMozillaのものもありました。
https://github.com/mozilla-services/mozilla-style

EclipseでのCheckStyleの設定方法はここを参考にしました(そこからかorz)
http://www.atmarkit.co.jp/fjava/rensai3/eclipsetst02/eclipsetst02_2.html

Formatter
以下のページを参考にしました。
ReDo / EclipseのJavaフォーマッター インポート用XML
また、以下にGoogleが各種ガイドラインを出してる。 google-styleguide