7

特定のクラスを削除からスキップしたい。通常、アプリケーションのどこからも参照されませんが、リフレクションによってのみ参照されるため、シュリンカーによって削除されます。パッケージ内の他の「隣接する」クラスによって参照されますが、まだアプリケーションに直接使用されておらず、リフレクションによってのみ使用されています。

私は、この特定のクラス、マッピングのために特別に扱うことに決めました:

org.mypckg.Helper -> gh6

...もちろん、アプリ内でリフレクション呼び出しを変更しました:

forName("gh6")

マッピング入力に問題はないようですが、マッピング ルール自体は、クラスの削除を防ぐのに十分ではありません。さらに、-keep スイッチを使用してクラスを保持することはできません。これは、元の名前 (org.mypckg.Helper) を使用してクラスを保持するためです。これは望ましくありません。

何らかの理由で、プロジェクト内でクラスを手動で 'gh6' に屈折 (名前変更) することはできません。

4

1 に答える 1

15

ProGuard は構造を認識しClass.forName("org.mypckg.Helper")ます。その後、それ以上の構成なしで保持して難読化org.mypckg.Helperします。

さもないと:

-keep,allowobfuscation class org.mypckg.Helper
-adaptclassstrings org.mypckg.AdjacentClass*

Cfr. ProGuard マニュアル > 使い方 > Keep オプションの概要

Cfr. ProGuard マニュアル > 使い方 > -adaptclassstrings

于 2012-09-26T21:22:49.527 に答える