Android ライブラリ プロジェクトを使用して、「最終プロジェクト」の特定のクラスを上書きするにはどうすればよいですか。
つまり、ライブラリ プロジェクトを参照し、同時にコードの一部を変更したい..
Android ライブラリ プロジェクトを使用して、「最終プロジェクト」の特定のクラスを上書きするにはどうすればよいですか。
つまり、ライブラリ プロジェクトを参照し、同時にコードの一部を変更したい..
おそらく、Android ライブラリ プロジェクトとはまったく異なりますが、Java 言語自体のインターフェイスとクラス継承機能を使用することで、それを実現できます。
ライブラリ プロジェクトは、子の親からリソースをマージ/オーバーライドし、さまざまなアプリ パッケージ名で 1 つのコードベースを使用できるようにすることをうまく処理しているようです。
ライブラリ プロジェクトを使用して、AdMob を使用するアプリと使用しないアプリのエディションを作成することに関する最新のコメントを踏まえて、この回答を修正しました...
AdMob ライブラリ (最大 138 KB) をフル エディションまたは有料エディションにパッケージ化することを気にしないと仮定すると、Applcation クラスを拡張し、その中で列挙型と静的メソッドを宣言して、AdMob 広告を表示するかどうかを決定することが最も簡単です。
public class Application extends android.app.Application
{
public enum EditionType { LITE, FULL};
public static int getAdVisibilityForEdition(Context ctx)
{
if (EditionType.valueOf(ctx.getString(R.string.edition)) == EditionType.FULL)
{
return View.GONE;
}
return View.VISIBLE;
}
}
このクラスをライブラリ プロジェクトにのみ追加します。3 つのプロジェクトすべてで、次のように /res/Strings.xml にエントリを追加する必要があります。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="edition">LITE</string>
</resources>
ライブラリ プロジェクトでこの文字列の値が何であるかは問題ではありませんが、FULL と LITE をそれぞれ使用して、有料版と広告サポート版で値を変更します。
最後に、アクティビティをこれらの値に応答させるには、onCreate() または onResume() で次のように呼び出します。
View ad = (View)this.findViewById(R.id.your_adMob_view_id)
ad.setVisibility(Application.getAdVisibilityForEdition
(this.getApplicationContext()));
ビューが表示されていない場合、AdMob コードは実際に広告を取得しようとしないため、これは AdMob で正常に機能します。
AdMob jar 用に余分な 138K とフル エディションで必要なマニフェスト アクセス許可を本当に必要としない場合は、これを行うためのよりエレガントな方法がありますが、AdMob の周りにある種のラッパーを使用し、エディション間の xml レイアウト (AdMob ビューを含めるかどうか) を変更するか、AdMob ビューをプログラムでレイアウトに挿入します。
それが役立つことを願っています。