Subversionでアプリの無料/有料バージョンを個別に維持する方法


8

Androidマーケットプレイスに有料アプリケーションを持っていますが、無料の広告サポートバージョンをリリースしたいと考えています。

私がこれを行うと思った最も簡単な方法は、広告を追加するための追加のコードを含むsubversionリポジトリーにブランチをセットアップすることでした。ただし、これをAndroidマーケットプレイスに送信しようとすると、一意のパッケージ名が必要になります。すべてのクラスファイルのパッケージを変更する必要があるため、トランクとブランチのマージが非常に面倒になるため、このソリューションはもはや機能しません。

これら2つのプロジェクトを一緒に保ち、パッチを共有しながら、異なるパッケージを使用する最良の方法は何ですか?


1
この質問は、ここではプログラマの話題から外れていないことに注意してください。主な問題は、プロジェクトの構造と構成管理の問題に関するもので、どちらもここに属します(Stack Overflowや他のサイトにはありません)。
トーマス・オーエンス

回答:


9

コンパイラ指令を検討しましたか?

例:

#define FREE
// ...
#if FREE
Console.WriteLine("Free version");
#else
Console.WriteLine("Paid version");
#endif

まったく同じコードベースを維持し、2つの個別のビルドスクリプトまたはパラメーター化可能なスクリプトを使用して、2つのビルドをターゲットにすることができます。

msbuild /p:DefineConstants=FREE

Javaでこれを行うには、こちらこちらをお読みください。そして多分これ


Javaがそれらのことを聞いていたとは思わなかった
Malfist

Javaにも存在します。

@ Pierre303すみません、それができるとは知りませんでした。ただし、パッケージの問題はまだ解決されません....うーん。
マイケルK

1
@MichaelK:これは、ビルドスクリプトのよく整理された検索と置換タスクで簡単に実現できます。

これは、/ resフォルダー内の条件付きリソースの問題も解決しません。
ドンターナー2012

5

アプリケーションパッケージのみが一意である必要があります。こちらをご覧ください。これは、マニフェストファイルで宣言されたパッケージです。ほとんどのコードをで使用できcom.mydomain.myapp、で別のメインアクティビティを使用できcom.mydomain.myapp.freeます。


3

本当に分離したい場合、最良の方法は、同じリポジトリの2つの部分として設定することです。そうすれば、少なくとも異なるブランチ間で変更をマージできます。完全に分離したい場合は、多くのパッチファイルをシュレッピングします。

私はこれをしました、そして率直に言って、それは実際には素晴らしい戦略ではありません。特にコンパイルされた環境では、コードベースが2つではなく1つになるように、無料と有料の別々のビルドプロセスを用意する方がはるかに優れています。2つのコードベースがある場合、状況異なります。


それはそういうことです、私はそれらを分離したくありません。別に必要なのは、広告を追加する追加のコードだけです。ただし、Androidでは、アプリに一意のパッケージ名を付ける必要があります。そのため、2つまたは3つのファイルよりも大きな変更を強いられます。
Malfist

おそらく、小さなプリコンパイラのvoodoも機能するはずです。ビルドシステムは素晴らしいものです。
ワイアットバーネット

0

バージョン管理は、このようなことを管理する方法としては不十分です。最終的には、メンテナンスの悪夢- ほとんど同一である必要のある2つの個別のアプリケーション-が発生します。

複数のプロジェクトソリューションを検討しましたか?(注意:私は実際にこれを実行していませんが、実現可能であり、Androidで許可されていると思います。後で試して、確実に確認します。)すべてのアプリコードをメインプロジェクトjarにコンパイルします。次に、2つの個別のAndroidアプリを作成します。1つは有料バージョン用で、もう1つは無料バージョン用です。これにより、パッケージの命名問題が解決されます。これらのアプリは、広告バージョンに広告をサポートするコードが含まれていることを除いて、ほとんどすべてのことをメインjarに委任します。

同様のトピックに関するこのディスカッションも興味深いかもしれません。


コードは全体像のごく一部であり、JARring upは、それに付随するリソース、レイアウト、アセットなどのすべての追加データの処理に役立ちません。すべてをきちんとまとめることができないのは、Androidの不幸な欠点であり、あまり変化しないものや外部から構成できるものにゴム印を付ける必要があるのは、私にとって苦痛です。
Blrfl 2012

同意する。彼らは小さなアプリを簡単にビルドできるように素晴らしい仕事をしましたが、メンテナンスが必要な大きなアプリをビルドすることは困難です。有望に見えるいくつかのMavenソリューションがありますが、まだ十分に検討できていません。
マイケルK

0

を使用してアプリをビルドするとfeature toggle、目的を達成できますが、多くのコードをやり直す必要がある場合があります。

次のような.iniファイルで2(私は3をお勧めします)の機能コンテナー環境を定義することによって:

[paid]
features.ads = false
features.featureOne = true
features.featureTwo = true
features.premiumFeature = true
features.underDevFeature = false
features.debug = false;

[free:paid]
features.ads = true
features.premiumFeature = false

; And the optionnal third
[development:paid]
features.debug = true
features.underDevFeature = true

このようにして、バージョン管理ソースに1つのブランチしか必要としない、統一されたバージョンがあります。

特定のスクリプトでは、機能が承認されているかどうかを確認する必要があります。承認されていない場合は、表示されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.