エントリ ポイント
エントリ ポイント(Entry Points)とは主に、お客様のソフトウェアのうち、そのソフトウェア外部からアクセスされることを想定した要素のことであり、これらの要素は正しい動作のためには除去したり名前変更したりすることが通常できないものです。 リフレクションを介してアクセスされるクラスとメンバーは、その使用状況が PreEmptive Protection™ DashO™ for Android & Java によって検出されるように、追加のエントリ ポイントとして指定することができます。 詳細については、名前変更または除去を参照してください。
メモ:Android モードの場合、DashO は名前変更と除去を R8 で処理させます。その場合、エントリ ポイントは無視されます。
構成対象となるエントリ ポイントの例には、以下があります。
- パブリック API の構成要素にすることができるクラスまたはメンバー。
- 実行可能にしたいメソッド、
public static void main(String[])
。 - リフレクションを介してアクセスされるメソッド。
- APK を後処理する際に Android マニフェスト内で参照される Android アクティビティ。
既定の動作
DashO 構成にエントリ ポイントが定義されていない場合、DashO はすべての入力 jar のマニフェストを分析する(例:Main-Class
ヘッダーなどがないか探す)ことで、エントリ ポイントがあれば検出しようとします。
また、DashO は public static void main(String[])
のメソッドがないかも探します。
DashO は、この方法でエントリ ポイントの検出に失敗した場合、すべての入力をライブラリのエントリ ポイントと見なし、public
クラスのすべての public
メンバーと protected
メンバーを名前変更と除去の対象から除外します。
メソッドとフィールド
エントリ ポイントにしたいメソッドとクラスを指定するには、DashO GUI の Entry Points - Methods and Fields ページを使用します。 それらのメソッドやフィールドは既定で除去と名前変更の対象から除外されますが、エントリ ポイントとして指定されたメソッドは DashO によって分析され、未使用のクラスとメンバーを特定します。
Entry Points - Methods and Fields ページにあるクラス、メソッド、および/またはフィールドは、必要に応じて名前変更の対象とすることもできます。
通常は、エントリ ポイントは名前変更しないでください。アプリケーションの外部からアクセスされることが多いためです。
なお、名前変更しても問題がない場合もあります。
たとえば、クラスを JAR マニフェストの Main-Class
属性で参照する場合、変更した名前を使用するように JAR マニフェストが DashO によって更新されます。
ライブラリ
ディレクトリ、JAR ファイル、ZIP ファイル、または APK ファイルをライブラリのエントリ ポイントとして指定するには、DashO GUI の Entry Points - Libraries ページを使用します。 ライブラリのエントリ ポイントが主に使用されるのは、その名前が示すように、パブリッ ク API を使ってライブラリを配布しないと、そのライブラリと広範に連携できるソフトウェアが必要になる場合です。
既定では、ライブラリのエントリ ポイントに含まれるすべての public
クラスとそれらのクラスの public
メンバーは事実上、エントリ ポイントであるため、除去と名前変更の対象から除外されます。
protected
メンバーを除外するようにライブラリのエントリ ポイントを構成することもできます。
ライブラリのエントリ ポイントは、DashO への入力と自動的に見なされて、処理するクラスを決定するための入力一覧に結合されるので、Input - Jars and Classes で含める必要はありません。
特殊クラス
特殊クラスのエントリ ポイントを使用すると、メソッドやフィールドの複雑なエントリ ポイントであるクラスに対して特殊な規則を指定できます。 特殊クラスの種類の多くは、一連のクラスのうちの 1 つを拡張したクラス用に設計されたものであるか、一連のインターフェイス(通常、Spring や Android などのフレームワークによって定義されたインターフェイス)のうちの 1 つを実装したクラス用に設計されたものです。 これらのクラスの名前は、完全一致、パターン、あるいは正規表現で指定することができます。
種類 | 機能 | プロジェクト ファイル要素 |
---|---|---|
Android | android.app.Application 、android.app.Activity 、android.app.Service 、android.content.BroadcastReceiver または android.content.ContentProvider を拡張するために使用します。 |
<android> |
Applets | java.applet.Applet を拡張したクラスに使用されます。これらのクラス自体の名前は変更可能です。 |
<applet> |
Class all fields/methods | 一致したクラス内のすべてのフィールドおよびメソッドをエントリ ポイントとしてマークします。クラスとそのメンバーの名前は変更されません。 | <unconditional> |
Class public fields/methods | 一致したクラス内のすべてのパブリック フィールドおよびパブリック メソッドをエントリ ポイントとしてマークします。クラスとそのメンバーは除去されません。 | <publics> |
Enterprise JavaBeans (EJBs) | Bean のホームと主要なクラスを含む javax.ejb パッケージにあるインターフェイスを拡張したクラス用に使用されます。 |
<ejb> |
iAppli | NTT ドコモの iAppli フレームワークで使用されている com.nttdocomo.ui.IApplication クラスを拡張したクラスに使用されます。これらのクラス自体の名前は変更可能です。 |
<iappli> |
Midlet | javax.microedition.midlet.Midlet を直接的または間接的に拡張したクラスに使用されます。これらのクラス自体の名前は変更可能です。 |
<midlet> |
Servlets | javax.servlet.Servlet を拡張したクラスに使用されます。これらのクラス自体の名前は変更可能です。 |
<servlet> |
SpringBean | Spring Bean に使用されます。詳細については下記を参照。 | <springbean> |
Spring Bean
SpringBean のエントリ ポイントは、Spring XML 構成ファイル内で参照される Spring Bean としてクラスを識別するために使用されます。
既定では、SpringBean クラスのプロパティ(つまり、getFoo()
、setFoo()
、 isBar()
の規則に従うプロパティ)メソッドは、名前変更と除去の対象から除外されます。
Additional Entry Points(追加のエントリ ポイント)も指定できます。たとえば、Spring XML 構成ファイル内の init-method
および destroy-method
属性で参照されるメソッドなどです。
これらのメンバーから名前変更するメンバーを選択するには、以下の設定を使用します。
- Rename Property Methods - この設定を有効にすると、プロパティの規則に違反しない方法でプロパティ メソッドを名前変更できるようになります(例:
getFoo()
はgetA()
に名前変更できます)。 - Rename Entry Points - この設定を有効にすると、指定した追加のエントリ ポイント(Additional Entry Points)を名前変更できるようになります。
- Rename Other Members - この設定を有効にすると、追加のエントリ ポイント(Additional Entry Points)として指定していない非プロパティのメンバーを名前変更できるようになります。
詳細については、<springbean> セクションと Spring Framework セクションを参照してください。