日食でこれを行う簡単な方法を見つけました。それを発見したとき、私はそれがいかに簡単であるかに非常に驚いた.
- com.app.free のプロジェクト プロパティで、「Is Library」が true であることを確認します (これを変更する前に、プロジェクトを少なくとも 1 回コンパイルしておく必要があります。そうしないと、単にこのエラーが発生した場合、ライブラリ プロジェクトをコンパイルできないというエラーが表示されます)。チェックを外し、コンパイルしてから、再チェックしてください。
- 新しいプロジェクト com.app.pro を作成します
- プロジェクトの Android セクションのプロジェクト設定で、ライブラリとして com.app.free プロジェクトを追加します。
- com.app.pro に新しいクラス MyApplication を作成し、アプリケーションを拡張します
- override onCreate() 注: コピー/貼り付けの仲間の場合、これはアクティビティの onCreate(Bundle savedInstanceState) バンドルと同じではありません。これはアクティビティではなくアプリケーションであるため、 Bundle 引数を削除する必要があります。
- 次に、検証メソッドで読み込まれる静的変数を追加または設定して、ライセンスを検証します。例: IS_PRO = true; 次に、検証メソッドは変数を読み取り、IS_PRO が true の場合は true を返します。
- マニフェストの内容を com.app.free から com.app.pro にコピーします。
- android:name="MyApplication " を com.app.pro マニフェストの application タグに追加します
- すべてのアクティビティの name 属性の前に com.app.free を追加します。(これにより、アクティビティが無料版のライブラリ パッケージにあることがアプリケーションに認識されます) 例: android:name=".MainActivity" => android:name="com.app.free.MainActivity"
- コンパイルすると、プロバージョンができます
この方法は、グローバル検証方法を使用していることを前提としています。たとえば、ユーザーが最初にアプリをインストールした時期を決定するドメインでホストされている 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 ステートメントの問題について警告しないようにすることです。それ以外は問題なく動作しているようです。