一部のフレームワークは、バイトコードからのデバッグ情報を使用してメソッド引数名を読み取ります。しかし、デバッグ情報にはさらに多くの情報が含まれています。
クラスのサイズを最小限に抑えるために (不思議に思うだけですが)、すべてのデータを削除し、メソッドの引数名以外をすべて削除してLineNumberTable
フィルター処理を行うことができます。LocalVariableTable
または、変数をフィルタリングして行番号を残すため、stracktrace が行番号とともに残ります。
これが機能するかどうかは誰にもわかりません(テストする前に:)? または、これを行うツールはありますか (自分で書く前に:)?
ありがとう。
EDIT私の質問を明確にするために:説明された方法で変更されたライブラリ(jar)(たとえば、いくつかのLocalVariableTableデータを削除)は、Javaエコシステム(Androidからアプリサーバーまで-jboss、websphere ...)で動作しますか?
EDIT #2ストライピング用の簡単で汚いツールを作成しました。ここにいくつかの結果があります。
original jar size: 1,288,625
stripped just non-method local variables: 1,272,095 (99%)
removed and LineNumberTable: 1,192,492 (93%)
これらの結果から (私のコードが正しければ)、LocalVariableTable のフィルタリングは最小化には役立たないと結論付けることができます。意味があるのは LineNumberTable を削除することだけですが、スタック トレースで数値が失われます。
ここで、LineNumberTable を削除しただけで jar が機能するかどうかを確認します。