無料版と有料版でソースを共有する

ソースの管理を考えると、有料版と無料版ではできる限りソースを共有したい。そういう時にはどうすればいいか。

方針

プロジェクトを3つにわける。

  • コア
  • 無料版
  • 有料版

手順

まず最初にコアとなるプロジェクトを作成する。その際ライブラリとしてマークすること。既存のプロジェクトがある場合、ライブラリとしてマークするだけでコアパッケージの代わりになる。

コアの中ですべての機能が完結するように処理を書く。有料版にしか存在しないアイコンなども全部含めてしまうし、無料版でしか必要のない AdMob 用 jar なども含めてしまう。

次に、無料版有料版のプロジェクトを作成。それぞれ、コアを参照するよう設定する。

無料版有料版のプロジェクトでは AndroidManifest.xml だけを設定。基本的にはコアで動いていたものをコピーすれば大丈夫。あとはアプリ名とか権限をそれぞれ設定する(例えば無料版にのみ広告を表示する場合、有料版からはインターネット権限を削除するなど)。

src, libs, res の各フォルダはカラッポで大丈夫。assets フォルダに関しては参照元のものを使えないらしいので、それぞれにコピーする必要がある(使ってないならもちろん空でいい)。

まずその状態で動くことを確認したら、上書きたいリソースだけ res フォルダに追加していく。たとえばランチャーアイコンとか文字列リソースとか。

処理の分岐

Context#getPackageName() で、起動したアプリの AndroidManifest.xml に設定されている package を文字列で取得できるので、コア内でこれを利用して処理を記述する。他にも同じキーで別の文字列になるようなリソースを用意するとかいろいろやり方はあると思う。