【どろいど】別のプロジェクトをライブラリとして参照する
Androidを始めて2ヶ月ちょい。お仕事もいくつか依頼があったり、プリンタ屋さんからも打診があり、お勉強と練習もありで、実際に使えるアプリがいくつか出来上がって来た。お勉強の一環で Google Play(Androidマーケット)にもアップロードしてみた。すると、さきほど作ったものとほんの少しだけ違うバージョンを作る必要性が生じて来た。カスタマイズや、似たようなプロジェクトの場合、あるいは Google Play(Androidマーケット)用の 無料版と有料版など。
この時、署名入りの apk をつくると全部同じ名前だとインストールできなかったり 取り扱いをしてくれなかったりと、いろいろ不具合が生じる。
Windows と Visual Studio の場合、筆者はセットアッププロジェクトで、このあたりを解決していたのだが、はてさて Android と Eclipse では、どうすればよいか。全く同じ Core部分を持ったプロジェクトをいくつも作るのは非効率的。Android ライブラリというのがあったので、これで解決。備忘録メモとして記す。
(1)まず、ごくごく普通に開発する。無料版・有料版があるのなら、どちらもOKのものを1つ作る。カスタマイズの場合も1つのプロジェクトで作ってしまう。( それぞれのバージョンで挙動が異なるわけなので final変数などで、処理分岐するような作り方をしておく )
(2)Androidライブラリにチェック
プロジェクトで右クリック→プロパティ
Android の ライブラリ( Is Liblary ) にチェックを入れる。(これで他のプロジェクトから参照できるようになる)
(3)別バージョンのプロジェクトを新規作成(ソースは不要)
(4)さきほどチェックしたライブラリを参照するよう設定する
新しく作成したプロジェクトで右クリック→プロパティ
Android Dependencies をクリックして開くと追加したライブラリが表示される。(新規プロジェクトのライブラリを削除すると消える。さきほどのチェックを外しても消える。参照の状態を目視確認できる)
(5)リソース(resフォルダの中身)を丸ごとコピー
さきほどチェックしたコアとなるプロジェクトの resフォルダを丸ごと 新しいプロジェクトにコピーする。アイコンや drawable要素、String要素、アプリ名など異なる場合は変更する。
(6)マニフェスト
マニフェストの中身もコピー。Activityはライブラリから開くわけなので、全部フルパスで書き直す。(例: .MainActivity だと作ってないので NotFound の Exceptionが発生する(あたりまえ!)ライブラリ参照する アクティビティを指定する。起動Activity だけでなく全部)
(7)コアの方でパッケージ名で判断
コアの方では getPackageNameでパッケージ名が取得できるので、これでバージョンなりエディションを判別する。例では free版であるかどうかを調べるのに contains で freeという文字が含まれているかどうかで判別させている。
これでいくつバージョンやエディションが増えてもコアとなる1つのプロジェクトだけ修正・改訂すればよくなった。この方法の便利なところは、NDKや外部ライブラリ参照も含めてまるごと使える点だ。ただし、コアのプログラムなり NDK なりを改変するときは(1)のライブラリチェックを外さないといけないようだ。
もうちょっと上手いやり方があるのかも知れないけれども、筆者的には今のところはこれでOK。
それで作ってみたのがこちら。