5

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

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

これら 2 つのプロジェクトを一緒に維持し、パッチを共有しながら、別のパッケージを使用するにはどうすればよいですか?

4

5 に答える 5

8

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

例:

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

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

msbuild /p:DefineConstants=FREE

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

于 2012-04-18T14:15:50.827 に答える
5

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

于 2012-04-18T14:54:27.190 に答える
3

本当に別々にしたい場合は、同じリポジトリの 2 つの部分として設定するのが最善の方法です。そうすれば、少なくとも異なるブランチ間で変更をマージできます。物事を完全に分離したい場合は、パッチファイルを大量に処理することになります。

私はこれを行いましたが、率直に言って、実際には優れた戦略ではありません。特にコンパイル済みの環境では、ビルド プロセスを無料と有料で分けて、コードベースを 2 つではなく 1 つにする方がはるかに優れています。2 つのコードベースがある場合、状況異なります。

于 2012-04-18T14:15:49.280 に答える
0

バージョン管理は、このようなものを管理するための貧弱な方法です。ほぼ同一である必要がある 2 つの別個のアプリケーション - メンテナンスの悪夢に終わるでしょう。

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

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

于 2012-04-18T14:42:47.750 に答える
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 つのブランチしか必要としません。

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

于 2012-04-18T15:39:53.497 に答える