Contactお問い合わせ
お気軽にお問い合わせください。
Dotfuscator for .NET および DashO for Java/Android™ には PreEmptive Solutions 社が特許を保有する「オーバーロード誘導 (Overload Induction™)」名前変更システムが実装されています。 オーバーロード誘導は、その名が示す通り可能な限り多くのメソッドに対しオーバーロードを誘導します。
このアルゴリズムは名前を再利用可能な機会を全て検出し、それらを利用します。 多くのお客様からご報告いただいた平均では、全メソッドの 33% が “a” 1文字にリネームされ、さらに 10% のメソッドが “b” にリネームされました。
このアルゴリズムは 1文字の名称へのリネームに限定されているわけではありませんが、 本アルゴリズムの開発のきっかけとなったのは、可能な限り小さな Java 実行可能形式を作成したいという要望でした。通常のリネームアルゴリズムでは、”getX” のような名称を見つけるとその全てのインスタンスを全体を通じて “a”という 短い名称へと変換します。ただ不幸なことに、文字 “a” はそれ以降メソッド名の衝突の恐れがあるため利用できません。PreEmptive Solutions 社が特許を保有するオーバーロード誘導名前変更システムでは、そのような衝突を全て検出し、利用可能な名称の最小集合を生成するのです。
その効果が顕著に現れる例としては、Adobe Acrobat® の内部用 Java バージョンでは全てのメソッドの 30% が “a” にリネームされました。また Activerse 社の Ding™ 製品では 28% が “a” にリネームされ、さらに 11% が “b” にリネームされました。DashO for Java/Android-Pro v2.2 では、自分自身を処理してみたところ全メソッドの 41% が “a” に、またさらに 12% が “b” にリネームされました。
なお、これらの数値はリネーム不能なメソッドを含めた全メソッドに対する値である点に留意してください。 例えば、コンストラクタやスタティックなイニシャライザおよびシステムメソッドのオーバーライドはリネームできません。従って、リネーム可能なメソッドに対するパーセンテージを調べれば、結果はより高い変換率を示すはずです。
オーバーロード誘導により、極限までサイズの最小化と情報の除去を実現します。
以下に実際の除去結果をいくつか示します。
Adobe™社の Acrobat™ Reader の Java バージョンを DashO for Java/Android-Pro で処理してみました。
メインビューアの main メソッドをトリガとした場合:
プロジェクトの最終クラス数 | 694 |
解析中にアクセスされたクラス数 | 846 |
メソッド数 (処理後/オリジナル) | 3521/3999 (除去率: 11.95%) |
フィールド数 (処理後/オリジナル) | 2728/3614 (除去率: 24.51%) |
コンスタント数 (処理後/オリジナル) | 66713/85832 (除去率: 22.27%) |
リネームの結果、サイズは jar ファイル状態で 30% 縮小されました。
JavaFig – Unix の xfig の移植版です。 UI ベースの Java プログラムでは最良のものの1つです。
プロジェクトの最終クラス数 | 66 |
解析中にアクセスされたクラス数 | 155 |
メソッド数 (処理後/オリジナル) | 785/910 (125 個のメソッドを除去 – 13.7%) |
フィールド数 (処理後/オリジナル) | 756/963 (207 このフィールドを除去 – 21.4%) |
コンスタント数 (処理後/オリジナル) | 15544/16400 (856 個のエントリを除去 – 5.2%) |