1

ひし形パターンの依存関係を持つ jar ファイルのコレクションがあります。

          base.jar
         / \
dep1.jar dep2.jar
         \ /
         dep3.jar

ProGuard でそれらを難読化し、依存関係を保持したいと考えています。たとえば、base.jar と dep2.jar の難読化されたバージョンは、dep1.jar と dep3.jar の難読化されたバージョンなしで (ちょうど同じように) 分離して実行できます。可、難読化されていない)。同じパッケージ名の jar に分散されたクラスと、難読化したいメソッド (さまざまなクラスの) を呼び出す依存 jar 内のメソッドが、それらが依存する jar 内にあります。

一度にすべての jar を難読化しようとすると、ProGuard はそれらの依存関係を「理解」しません。また、base.jar のクラスから静的メソッドを取得し、それを dep1.jar の難読化されたクラスに移動します。dep1.jar がクラスパスにない場合、base.jar 内のそのメソッドを「予期する」 dep2.jar の難読化されたバージョンのコードは、実行時に失敗します。

難読化された jar の依存関係が確実に保持されるようにするにはどうすればよいですか?

ドキュメントでは段階的な難読化を使用することを提案していますが、-applymapping必要と思われるスイッチは、依存する jar を呼び出す際に使用する難読化された名前を依存メソッドに伝える引数を1 つしか取ることができず、最初に難読化されます。dep1.jar の難読化では、そのようなマッピング ファイルの引数が 1 つ生成され、dep2.jar の難読化では別のマッピング ファイルが生成されますが、dep3.jar の難読化では、引数にこれらのマッピング ファイルの両方(および base.jar のファイル) が必要です。dep1.jar と dep2.jar を一緒に難読化することはできません (またはできますか? ) が、コードが一方から他方に再配置される可能性があるため、1 つのマッピング ファイルを生成できません。自分でマッピング ファイルをマージする必要がありますか?-applymapping

4

2 に答える 2

1

最も簡単な (最適ではない) 解決策は、最適化 (-dontoptimize) を使用せずに、すべてを一度に処理することです。

于 2012-06-07T09:37:50.097 に答える
1

構成にフラグを設定せずに ProGuard を 2、3 年間使用-repackageclassesしており、.jar ファイルは難読化されていても適切に動作します。.jar ファイルの中を調べている人は誰でも、名前空間が com.[company] であることがわかります。これはフラグで隠すことができますが、それは大した問題ではないと判断しました。なくても大丈夫なはずです。

(余談ですが、-repackageclasses有効になる前にクラス名が難読化されていて、どこかで名前の衝突があるのだろうか?一度似たような問題がありました。)

于 2012-06-05T19:36:49.077 に答える