★ The Tsuchinoko News 2 (つちのこ通信2) ★

重要な話から、どうでもいいことまで。ほとんど役に立たないことを書き連ねています。

【どろいど】別のプロジェクトをライブラリとして参照する

Androidを始めて2ヶ月ちょい。お仕事もいくつか依頼があったり、プリンタ屋さんからも打診があり、お勉強と練習もありで、実際に使えるアプリがいくつか出来上がって来た。お勉強の一環で Google Play(Androidマーケット)にもアップロードしてみた。すると、さきほど作ったものとほんの少しだけ違うバージョンを作る必要性が生じて来た。カスタマイズや、似たようなプロジェクトの場合、あるいは Google Play(Androidマーケット)用の 無料版と有料版など。
この時、署名入りの apk をつくると全部同じ名前だとインストールできなかったり 取り扱いをしてくれなかったりと、いろいろ不具合が生じる。
Windows と Visual Studio の場合、筆者はセットアッププロジェクトで、このあたりを解決していたのだが、はてさて Android と Eclipse では、どうすればよいか。全く同じ Core部分を持ったプロジェクトをいくつも作るのは非効率的。Android ライブラリというのがあったので、これで解決。備忘録メモとして記す。

(1)まず、ごくごく普通に開発する。無料版・有料版があるのなら、どちらもOKのものを1つ作る。カスタマイズの場合も1つのプロジェクトで作ってしまう。( それぞれのバージョンで挙動が異なるわけなので final変数などで、処理分岐するような作り方をしておく )

(2)Androidライブラリにチェック
f:id:tsuchinoko118:20120930070401j:image:left:w300プロジェクトで右クリック→プロパティ
















f:id:tsuchinoko118:20120930070408j:image:left:w300Android の ライブラリ( Is Liblary ) にチェックを入れる。(これで他のプロジェクトから参照できるようになる)










(3)別バージョンのプロジェクトを新規作成(ソースは不要)

(4)さきほどチェックしたライブラリを参照するよう設定する
f:id:tsuchinoko118:20120930070942j:image:left:w300新しく作成したプロジェクトで右クリック→プロパティ

















f:id:tsuchinoko118:20120930070946j:image:left:w300Android→ライブラリのところで「追加」ボタン














f:id:tsuchinoko118:20120930070956j:image:left:w300さきほどチェックしたライブラリが表示されるので選択してOK







f:id:tsuchinoko118:20120930071003j:image:left:w300ライブラリに追加されているのでOK














f:id:tsuchinoko118:20120930071006j:image:left:w300 Android Dependencies をクリックして開くと追加したライブラリが表示される。(新規プロジェクトのライブラリを削除すると消える。さきほどのチェックを外しても消える。参照の状態を目視確認できる)





(5)リソース(resフォルダの中身)を丸ごとコピーf:id:tsuchinoko118:20120930071641j:image:left:w300
さきほどチェックしたコアとなるプロジェクトの resフォルダを丸ごと 新しいプロジェクトにコピーする。アイコンや drawable要素、String要素、アプリ名など異なる場合は変更する。








(6)マニフェスト
f:id:tsuchinoko118:20120930071930j:image:left:w300
マニフェストの中身もコピー。Activityはライブラリから開くわけなので、全部フルパスで書き直す。(例: .MainActivity だと作ってないので NotFound の Exceptionが発生する(あたりまえ!)ライブラリ参照する アクティビティを指定する。起動Activity だけでなく全部)




(7)コアの方でパッケージ名で判断
f:id:tsuchinoko118:20120930072407j:image:left:w300
コアの方では getPackageNameでパッケージ名が取得できるので、これでバージョンなりエディションを判別する。例では free版であるかどうかを調べるのに contains で freeという文字が含まれているかどうかで判別させている。

これでいくつバージョンやエディションが増えてもコアとなる1つのプロジェクトだけ修正・改訂すればよくなった。この方法の便利なところは、NDKや外部ライブラリ参照も含めてまるごと使える点だ。ただし、コアのプログラムなり NDK なりを改変するときは(1)のライブラリチェックを外さないといけないようだ。

もうちょっと上手いやり方があるのかも知れないけれども、筆者的には今のところはこれでOK。
それで作ってみたのがこちら