2

アプリの無料版と有料版を開発する最善の方法は、プログラムの大部分を含むライブラリ プロジェクトを用意することだと理解しています。無料および有料のプロジェクトは、このライブラリ プロジェクトを使用します。これにより、無料のプロジェクトと有料のプロジェクトで異なるリソースを使用できます。

ただし、私の質問は、無料アプリ内の機能をどのように制限するか (または有料アプリ用に拡張するか) です。たとえば、私の無料アプリはデータベース テーブルの最新の行にしかアクセスできませんが、有料アプリはすべての行にアクセスできます。

これを行う 1 つの方法は、有料の場合は true、無料の場合は false に設定するリソースのどこかにブール値フラグを設定することです。実行時に、ライブラリ プロジェクトはブール値フラグをチェックし、それに応じて動作を変更します。ただし、これは潜在的な攻撃に対して非常に簡単にハッキングできるようです。より良い方法はありますか?

これは、1 つの無料アプリで完了し、アプリ内課金を使用してプロ機能のロックを解除する方が簡単ですか?

4

3 に答える 3

4

私見、Java/Android では、このシナリオは簡単ではありません。理想的には、1 つのコードベースがあり、有料または無料のバージョンを自由にコンパイルできる必要があります。無料版では重要なメソッド/クラスが無効になっているため、データベースや xml をいじってアプリの全機能を有効にすることはできません。

これを行う 1 つの方法は、条件付きコンパイルを使用することですが、これも Java ではサポートされていません。ただし、http://prebop.sourceforge.net/doc.htmlなど、これを実行できる Ant タスクがいくつかあります。次のようにコードに何かを追加できます。

/* $if paid_version$ */
public void paid_method() {

}
/* $endif$ */

ビルドしている ant ターゲットに変数paid_version が定義されていない場合、上記のコードは削除されます。

プリバップをセットアップする方法は、全体として別のトピックです。複雑ですが、単一のコードベースを持つ価値があります。

2013 年 5 月の更新: Gradle に基づく新しい Android ビルド システムにより、有料および無料の APK のビルドが少し簡単になります。「ビルド バリアント」のトピックについては、Android ツールの Web サイトを参照してください。つまり、次のようにソースを構成できます。

/src/main/
/src/paid/
/src/free/

すべての共有コードは にあり/src/main、有料コードは に/src/paidあり、無料コードは にあり/src/freeます。ビルド システムにより、有料および無料の APK が作成されます。ただし、まだ欠けている機能の 1 つは、ソース自体で条件付きコンパイルを行う機能です。これを書いている時点では、Gradle ビルド ツールはまだベータ版の状態であるため、最終リリースでこれが追加されることを願っています。

于 2012-06-22T14:53:43.593 に答える
2

アプリが支払われたかどうかを指定するフラグをResまたはSharedPrefsに保存しないでください。ルート権限を取得された電話はそれらにアクセスでき、それらを変更できます。私もこの問題を抱えていて、2つの別々のアプリを作成しました(有料のアプリをコピーし、いくつかのメソッドを削除し、広告を追加しました)。これが最も簡単な解決策です。

于 2012-06-22T14:36:51.107 に答える
2

IMO では、単一のソースから複数のアプリ リリースを作成する最善の方法、ライブラリ プロジェクトを使用することです。

私は最近これを試みましたが、非常にうまく機能しているようです。これに基づいたコードを Google Play にリリースしようとしたことはありませんが、テスト デバイスで同時に実行できる個別のアプリを独自のアイコンで作成しました。

Android 上の個別のアプリはそれぞれ異なるパッケージ名を持つ必要があるため、個別の動作を構成する最も簡単な方法は、ライブラリでそのパッケージ名をテストして、現在無料版と有料版のどちらで実行されているかを確認することです。そのテストは、ライブラリ プロジェクトで定義されたカスタム アプリケーション派生オブジェクト内で行うことができます。パッケージ名は、getPackageName() を呼び出して取得できます。

無料アプリと有料アプリは、少なくとも AndroidManifest.xml ファイルといくつかのリソース (無料と有料を区別するアプリケーション アイコンなど) だけが必要な場合があります。

2 つのアプリのそれぞれのマニフェストで、application 要素の android.name 属性をカスタム Application 派生クラス (ライブラリで定義) へのフル パスに設定する必要があります。もちろん、manifest 要素自体の package= 属性を、それぞれのアプリに対して .free や .paid などで終わる個別のパッケージに設定する必要があります。マニフェスト内のアクティビティ オブジェクトは、(フル パスを使用して) ライブラリ内の適切なアクティビティ派生クラスに設定された android:name 属性を持つことができます。

有料機能を有効にするコードは、カスタム Application オブジェクトでパッケージをテストし、パッケージ名を解析し、それに基づいて有料バージョンと無料バージョンのどちらが実行されているかを判断し、有料機能を有効または無効にするメソッドを呼び出すだけです。によると。

完全なコードを含む非常に役立つ例 (やや古いですが、まだ関連しています) がここにあります。

https://github.com/donnfelker/FullAndLiteVersionSharedLibrary/blob/master/FooLibrary/src/com/example/foolibrary/FooLibraryApplication.java

于 2012-06-27T03:57:37.433 に答える