4

無料版と有料版に分割された Android アプリ プロジェクトがあります。両方のプロジェクトに共通するものはすべて、「コア」と呼ばれる Android ライブラリ プロジェクトにあります。次に、有料版と無料版の両方の実際の Android アプリ プロジェクトを作成します。

これら 2 つの APK のビルドには Ant スクリプトを使用しています。有料版は、有料版がビルド中であることを「コア」プロジェクトに伝えるプロパティを設定します。無料版は、無料版がビルド中であることをコア プロジェクトに伝えます。

Google が ADT 22 のリリースを決定するまでは、これは問題なく機能していました。現在、「コア」プロジェクトはこれらのビルド プロパティを取得しません。

現在、ライブラリ プロジェクトは別の Ant ビルド環境/プロセスでビルドされていると思われます。

ここで質問です。アプリ プロジェクトの build.xml ファイル内で参照される Android ライブラリ プロジェクトのプロパティを定義するにはどうすればよいですか? これらのライブラリ プロジェクトのビルドにプロパティを渡す方法は?

また、SDK の build.xml ファイルのどこでライブラリ プロジェクトが実際にコンパイルされているのでしょうか? 調べるのに適した場所だと思います。

御時間ありがとうございます。

4

2 に答える 2

1

無料版と有料版で異なる値を提供するために私が見つけた別の解決策は、[リソース] を使用することです。Android ビルド チェーンにより、アプリケーション プロジェクトは、共有ライブラリ プロジェクトで設定されたリソース値をオーバーライドできます。

たとえば、次のような任意の XML ファイルにブール型リソースを含めることができますres/values

<bool name="paid_version">false</bool>

もちろん、有料版には、独自のres/valuesサブディレクトリに同じリソースがあり、値はtrue.

次に、Activityサブクラスまたは を持つ他のクラスからContext、次のことができます。

if (getResources().getBoolean(R.id.paid_version)) {
    // Do the paid version code here
}

これには、実装がかなり簡単であるという利点があります。欠点として、これは動的コードに基づく実行時チェックです。これは、リソースの値が に設定されている場合、コンパイラやその他の静的解析ツールによってコードを最適化することができないことを意味しますfalse

于 2013-05-30T21:01:33.170 に答える