20

Android用のアプリケーションのPROバージョンを作成したいのですが、リポジトリを構造化する方法を考えていました。

知っているので、私はトランクと機能ブランチを持っています。プロバージョンを別のブランチに配置したいのですが、もっと良い方法があるのでしょうか?たとえば、2つのブランチを作成する必要があります。1つは無料バージョン用、もう1つはプロ用ですか。

Proバージョンには追加機能があり、広告はありません。プロバージョンにAdMobライブラリを含めたくありません。

この場合、リポジトリを構造化するための最良の方法について、経験や提案はありますか?

編集:私はこのスレッドで(私のアプリに)最適な解決策を見つけたと思います:http://groups.google.com/group/android-developers/browse_thread/thread/4ad3d67f735f16d7/948b4f9eee2490a3

そこで説明されているトリックは、実際のアプリケーションでPRO機能のロックを解除する目的でのみ機能する別のアプリケーションを用意することです。ロック解除アプリは市場で支払われ、実際のアプリはデバイス上に存在するかどうかを確認するだけです。

4

4 に答える 4

15

あなたがすでに決断を下したことは知っていますが、他の人に役立つかもしれない別の提案があります.

リポジトリには git を使用しています。ブランチの作成と維持は非常に簡単です。マスターの「プロ」リポジトリと「フリー」ブランチがあります。すべてのコード変更をマスターに加えます。私の「無料」ブランチは、変更が「無料」動作をトリガーすることによってのみ異なります。コードに変更を加えるたびに、マスター ブランチにコミットし、次にフリー ブランチに切り替えて、「rebase」コマンドを使用してマスターに追いつきます。

「無料」バージョンとして動作させる変更をロールバックし、行った変更をマスターに適用してから、「無料」変更を再適用します。

2 つのバージョンを維持する必要はありません。スイッチを切り替えたり、同じ変更を行ったり来たりすることを覚えておく必要はありません。問題のバージョンに不要なライブラリを削除できるため、プロの動作をトリガーする 2 つ目のアプリよりも気に入っています。

于 2010-03-29T18:55:29.993 に答える
11

2つのブランチを維持しないことをお勧めしますが、無料バージョンのPRO機能を無効にするために、ランタイムまたはコンパイル時のスイッチを用意します。ビルド時に不要なDLLを削除することもできます。

2つのブランチを維持することは、2つの場所で問題を修正することを意味します。これは、ブランチが必然的に分岐するため、より問題になります。

于 2010-03-27T11:28:28.053 に答える
7

日食でこれを行う簡単な方法を見つけました。それを発見したとき、私はそれがいかに簡単であるかに非常に驚いた.

  1. com.app.free のプロジェクト プロパティで、「Is Library」が true であることを確認します (これを変更する前に、プロジェクトを少なくとも 1 回コンパイルしておく必要があります。そうしないと、単にこのエラーが発生した場合、ライブラリ プロジェクトをコンパイルできないというエラーが表示されます)。チェックを外し、コンパイルしてから、再チェックしてください。
  2. 新しいプロジェクト com.app.pro を作成します
  3. プロジェクトの Android セクションのプロジェクト設定で、ライブラリとして com.app.free プロジェクトを追加します。
  4. com.app.pro に新しいクラス MyApplication を作成し、アプリケーションを拡張します
  5. override onCreate() 注: コピー/貼り付けの仲間の場合、これはアクティビティの onCreate(Bundle savedInstanceState) バンドルと同じではありません。これはアクティビティではなくアプリケーションであるため、 Bundle 引数を削除する必要があります。
  6. 次に、検証メソッドで読み込まれる静的変数を追加または設定して、ライセンスを検証します。例: IS_PRO = true; 次に、検証メソッドは変数を読み取り、IS_PRO が true の場合は true を返します。
  7. マニフェストの内容を com.app.free から com.app.pro にコピーします。
  8. android:name="MyApplication " を com.app.pro マニフェストの application タグに追加します
  9. すべてのアクティビティの name 属性の前に com.app.free を追加します。(これにより、アクティビティが無料版のライブラリ パッケージにあることがアプリケーションに認識されます) 例: android:name=".MainActivity" => android:name="com.app.free.MainActivity"
  10. コンパイルすると、プロバージョンができます

この方法は、グローバル検証方法を使用していることを前提としています。たとえば、ユーザーが最初にアプリをインストールした時期を決定するドメインでホストされている DB にユーザーを接続するクラスを作成しました。プロのみのアクティビティについては、LicenseClass.isValidLicense() をチェックします。これは日付を比較し、希望の日数よりも短い場合は true を返します。isValidLicense() 関数で、Application.IS_PRO が true に設定されているかどうかを確認し、設定されている場合は true を返します。

そのため、何度でも変更を行うことができ、両方を再コンパイルするだけで済みます。心に留めておくべき唯一のことは、com.app.free マニフェストで行った変更はプロに反映する必要があるということです。ただし、これはどのアプリケーションにも当てはまります。なぜなら、Android アプリでは、使用するアクティビティを宣言する必要があるからです。

注: プロジェクトの作成時に自動生成されたすべてのアセットとリソースは使用されないため、削除することができます (res フォルダー自体は削除しないでください)。また、必要な唯一のクラス ファイルは、ステップ 3 の MyApplication ファイルです。つまり、自動生成された MainActivity.class も使用されないため、削除することもできます。プロ版で使用されていないタグを削除することもできます。例: 検証が失敗した場合に開く BuyPro アクティビティがあります。プロ版では検証が失敗することはないので、必須ではありません。もちろん、これらの削除はすべてオプションであり、私が学んだことをお知らせするだけです.

短所: これまでに見つけた唯一の短所は、リソース変数が定数でなくなったため、switch ステートメントを使用できないことです。したがって、プロジェクトをライブラリとして使用する場合、たとえば、strings.xml ファイルで作成した変数は、プロ バージョンで同じ名前の変数を宣言すると自動的にオーバーライドされます。私にとって、これは短所ではありません。なぜなら、Java でスイッチ状態を使用するのが好きではないからです。これは、int 型のみの切り替えに制限され、定数値が必要だからです。つまり、Java では、通常 if ... else staments を使用する必要があります。さらに、カーソルを switch キーワードに合わせて Ctrl+1 を押し、[convert to if else] をクリックすると、Eclipse は実際に switch ステートメントを変換するのに役立ちます。また、app_name を「xml には 100 個の文字列変数が含まれていますが、pro バージョンで変更する必要がある、または変更したいのは app_name だけです。単に res/values/string.xml を再作成し (コピーしないでください)、app_name 変数を追加します。これで、無料バージョンの app_name 変数が上書きされます。これは、変更された唯一の変数であるため、プロ バージョンの string.xml ファイルには 100 ではなく 1 つの変数のみを含める必要があることを意味します。簡単なピージー。:-) xml には 100 個の文字列変数が含まれていますが、pro バージョンで変更する必要がある、または変更したいのは app_name だけです。単に res/values/string.xml を再作成し (コピーしないでください)、app_name 変数を追加します。これで、無料バージョンの app_name 変数が上書きされます。これは、変更された唯一の変数であるため、プロ バージョンの string.xml ファイルには 100 ではなく 1 つの変数のみを含める必要があることを意味します。簡単なピージー。:-)

編集: Eclipse ではライブラリの .apk をエクスポートできないことがわかったので、プロ版でライブラリとして追加した後、無料版で「Is Library」オプションのチェックを外す必要があります。私が知る限り、これが行う唯一のことは、Eclipse が switch ステートメントの問題について警告しないようにすることです。それ以外は問題なく動作しているようです。

于 2012-02-10T02:01:43.637 に答える
1

public static final boolean IS_PROフリー/プロの振る舞いを決定する単一のバージョンを用意します。

編集:
パッケージのもの。たとえば、すべてのクラスはの下にありcom.myapp.android.freeます。
次に、AndroidManifest.xml"com.myapp.android"で、有料バージョンとpackage="com.myapp.android.free"無料バージョンのpackage=を宣言します。
アクティビティやサービスなどにフルネームを使用する場合は、他に何も変更する必要はありません。

有料版から未使用のライブラリを削除する必要はありません。その場合は、手動で行う必要があります。

于 2010-03-27T11:55:02.063 に答える