最適化
DashO の最適化(Optimization)は、代数恒等式、演算子強度低減、およびピープホール最適化などを実行することにより、結果としてバイナリ サイズを減らし、コードを高速化します。 Optimization - Options ページでは最適化を有効または無効にすることができます。Optimization - Include および Exclude ページではクラスやメンバーを最適化の対象として選択または除外することができます。 また、DashO が、クラス、非プライベート メソッド、および非プライベート フィールドをパブリックで定義するかどうかを決定する方法を制御できます。
メモ:
DashO の最適化機能は Android モードで使用されず、関連する設定は無視されます。 Android モードを使用する場合、R8 を構成して同様の最適化を実行できます。
Make Public
DashO はディスクに書き込む前に、パブリックで定義するクラス、非プライベート メソッド、および非プライベート フィールドのアクセス修飾子を変更できます。
これは、パッケージのメンバーシップを変更し、保護されたアクセス修飾子または既定の(package-private)アクセス修飾子を使用するクラスの問題を解決します。
たとえば、com.example.pack.Foo
クラスはエントリ ポイントであることが理由で名前が変更されず、com.example.pack.Bar
クラスは com.example.a
に名前を変更された場合、両方のクラスに対する package-private メンバーは名前を変更してアクセスの元のレベルを保持する必要があります。
通常、これは処理されたクラスの動作を変更しません。アクセス制限はコンパイル時にチェックされ、ほとんどの場合不正アクセスを防ぎます。
パブリック メソッドの動的リンクは、より制限されたアクセス レベルよりも高速です。 パブリックには制限がないので、相当するパッケージやクラスのメンバーシップを検証するランタイムは必要ありません。
既定では、名前変更されたクラス間でアクセスを保持する必要がある場合、DashO はクラスやメンバーをパブリックで定義します。 Optimization - Options ページではこの動作を無効にすることができます。 DashO がクラスやメンバーをパブリックで定義しない場合は、強制的にパブリックで定義させることもできます。
メモ:
Make Public を無効にすると、クラス、メソッド、またはフィールドの保護された/既定の(package-private)アクセス修飾子でアクセス エラーが発生するかもしれません。 つまり、指定されたパッケージにあったクラスは現在、名前が変更された新しいパッケージにある可能性があります。 しかし、それでもまだ、アクセスの例外を引き起こす元のパッケージからパブリックでないクラス、メソッド、またはフィールドへのアクセスを試みることができます。
DashO の既定の動作は、この問題をおおむね回避しており、ほとんどのアプリケーションにとって安全と見られています。