1

ProGuardを使用してJavaアプリケーションを難読化しようとしています。すべてのテキストと画像がGUI(Swing)フォームから消えるという問題が発生しています。最適化を無効にしてライブラリを追加しようとしましたが、何も機能していないようです。

難読化ツールによって生成された出力を逆コンパイラーで調べましたが、リソースパスはまだ正しいようです。

  1. jre / lib / rt.jarの外部にコアJavaライブラリを追加する必要がありますか?
  2. 無効にする必要のある設定は他にもありますか?
  3. ...他の提案?

ありがとう。

4

2 に答える 2

3

ほとんどの場合、リソースは、(a) リソースを含むパッケージが難読化されたときに ProGuard が変更するパスを介してアクセスされているか、(b) 出力 JAR にコピーされていないためにドロップされています。

構成に Java ランタイム クラスを明示的に含める必要はありません。

次のオプションを確認することをお勧めします。

-adaptclassstrings [class_filter] クラス名に対応する文字列定数も難読化する必要があることを指定します。フィルタを使用しない場合、クラス名に対応するすべての文字列定数が適応されます。フィルターを使用すると、フィルターに一致するクラスの文字列定数のみが適応されます。たとえば、コードにクラスを参照するハードコーディングされた文字列が多数含まれていて、それらの名前を保持したくない場合は、このオプションを使用できます。対応するクラスは縮小ステップでも自動的に保持されますが、主に難読化時に適用されます。

-adaptresourcefilenames [file_filter] 対応するクラス ファイル (存在する場合) の難読化された名前に基づいて、名前を変更するリソース ファイルを指定します。フィルタを使用しない場合、クラス ファイルに対応するすべてのリソース ファイルの名前が変更されます。フィルターを使用すると、一致するファイルのみが名前変更されます。たとえば、リソース ファイルの処理を参照してください。難読化する場合にのみ適用されます。

-adaptresourcefilecontents [file_filter] コンテンツを更新するリソース ファイルを指定します。リソース ファイルに記載されているクラス名は、対応するクラス (存在する場合) の難読化された名前に基づいて名前が変更されます。フィルターを使用しないと、すべてのリソース ファイルの内容が更新されます。フィルターを使用すると、一致するファイルのみが更新されます。リソース ファイルは、プラットフォームのデフォルトの文字セットを使用して解析され、書き込まれます。このデフォルトの文字セットは、環境変数 LANG または Java システム プロパティ file.encoding を設定することで変更できます。例については、リソース ファイルの処理を参照してください。難読化する場合にのみ適用されます。

詳細については、 http://proguard.sourceforge.net/manual/examples.html#resourcefilesを参照してください。

于 2011-02-11T07:21:37.853 に答える
0
  1. ありそうもない。OTOH とはどういう意味ですか? 「jre/lib/rt.jar以外のコアJava ライブラリ」は矛盾していませんか?

  2. 私は同様の問題を抱えていたので、. 私は PG に何もさせないことから始めて、クラスの一部の難読化などを許可しました。これは、問題の一種のバイナリ検索です。最後に、犯人を見つけて、ほぼすべてを難読化することができました。

  3. 例外を飲み込まないようにしてください。Class.getResource を使用して画像にアクセスしてみてください。それが機能するかどうかを確認してください。すべてを無効にします。

于 2011-02-11T02:55:18.637 に答える