2012-04-18 9 views
5

私はアンドロイドマーケットプレイスで有料のアプリケーションを持っていますが、無料の広告サポート版をリリースしたいと思います。サブバージョンでアプリのフリー/有料版を別々に保つ方法

私がこれを行うと考えた最も簡単な方法は、広告を追加するコードが追加されたSubversionリポジトリにブランチを設定することでした。しかし、これをアンドロイド市場に提出するには、固有のパッケージ名が必要です。このソリューションはもはや私のためには機能しません。なぜなら、すべてのクラスファイルのパッケージを変更しなければならないからです。これは、トランクとブランチを非常に厄介なものにするでしょう。

私はこれらの2つのプロジェクトを一緒にして、パッチを共有しながら別のパッケージで保存するのに最適な方法は何ですか?

+2

私はなぜ人々がこれをオフトピックとして投票しているのか分かりません。これは明らかに、ここに属するプロジェクトの構造と構成管理についての質問です。 –

答えて

3

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

私はこれをやったことがあり、実際にはそれは素晴らしい戦略ではありません。特にコンパイルされた環境では、フリーと有料のための別々のビルドプロセスを用意することで、2つではなく1つのコードベースが得られます。 2つのコードベースのものがある場合が発散します。

+0

それは事です、私はそれらを分離したくありません。私が欲しいのは、広告を追加する追加のコードだけです。しかし、アンドロイド私のアプリのためのユニークなパッケージ名を持って強制的に。だから私は、2つか3つのファイルだけでなく、もっと大きな変更を余儀なくされるだろう。 – Malfist

+0

おそらく、少しのプリコンパイラvoodoも動作するはずです。ビルドシステムはすばらしいものです。 –

8

コンパイラ指令とお考えですか?

例:

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

あなたはまったく同じコードベースを維持し、2が2つの別々のビルドスクリプトやparametrable 1を使用して構築するターゲットにすることができます。

msbuild /p:DefineConstants=FREE 

のJavaでそれを行うには、thisthisをお読みください。そして恐らくthis

+0

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

+0

Javaにも存在します。 –

+0

@ Pierre303申し訳ありませんが、私はあなたがそれを行うことができたか分かりませんでした。しかし、まだパッケージの問題は解決していません.... hmmm。 –

0

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

複数のプロジェクトソリューションを検討しましたか? (キャベット:これは実際には行っていませんが、実行可能なようですが、Androidはそれを許してくれると思います。後で試してみてください)すべてのアプリケーションコードをメインプロジェクトjarにコンパイルしてください。その後、有料版と無料版の2種類のAndroidアプリを作成します。これにより、パッケージの名前付けの問題が解決されます。これらのアプリは、あなたの広告バージョンに広告をサポートするコードが含まれていることを除けば、ほぼすべてのものをメインジャーに委譲します。

this discussion on a similar topicが面白いかもしれません。

5

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

0

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

2(私はrecommand 3)機能コンテナー環境を定義することによって。以下のようなiniファイル:

[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つの分岐のみを必要としますもしそうでなければ、あなたはそれを表示しないでください

関連する問題