2012-11-28 1 views
24

、Iソースが変更されていない場合、Proguardは同じマッピングを提供することを保証しますか?場合

  • は、すべてのバイナリ
  • は再びそれを構築していないクリーンアッププロジェクト
  • を構築します(何のソース/リソースとなどが変更されている)場合。

同じmapping.txtファイルを提供することをProguardが保証しますか?

+0

私はそれが同じ出力を生成すると思います(同じマッピングを使用します) - 再生中のRNGがない限り-----入力に変更がない場合(RNGを含む)、出力は同じでなければなりません。そのような主張の素早く「うなずき」を与えるmd5sum。しかし、ソースが頻繁に変わるので、これは実際には最も有用な質問ではありません。 –

答えて

34

ProGuardは確定的です。同じ入力の場合、同じ出力が生成されます。

オペレーティングシステムがディレクトリ(特にアーカイブ内にないクラスファイル)の入力ファイルを別の順序でリストしている場合、出力ファイルは異なる順序で処理される可能性があります。異なる。

+0

ProGuardマニュアルには、決定論的なところが書かれていますか?私は参考にして参照することはできません。 –

+15

@Diego私はProGuardの開発元です。あなたは私にこれを信じなければならないでしょう、あるいはあなたはソースコードを見ることができます。 –

+0

ありがとう、@エリック、私はmapping.txtのバージョンを忘れて、これについても疑問に思っていた。 –

7

実際に起こるかもしれませんが、私はプロガードがそれを保証しているとは思わないのです。

私はあなたがファイル名

を-applymappingマッピング

上の変更を避けるために、あなたのmapping.txtを再利用できるようになるとProguard documentationでこれを見つけたがプリントアウトされた指定された名前のマッピングを再利用するために指定しますこれまでのProGuardの難読化処理では、マッピングファイルにリストされているクラスとクラスメンバーは、指定された名前を受け取ります。言及されていないクラスとクラスメンバは新しい名前を受け取ります。マッピングは、入力クラスおよびライブラリクラスを参照することができる。このオプションは、インクリメンタルな難読化、つまり既存のコードにアドオンや小さなパッチを処理する場合に便利です。基本的にコードの構造が変更された場合、ProGuardはマッピングを適用すると競合が発生するという警告が表示されることがあります。両方の難読化処理で-useuniqueclassmembernamesオプションを指定することで、このリスクを減らすことができます。 1つのマッピングファイルのみが許可されます。難読化する場合のみ適用されます。

0

保証が必要な場合は、マッピングファイルを難読化プロセスの入力として使用する必要があります。しかし、そのマッピングファイルに関する矛盾に関するすべての警告を注意深くチェックする必要があります。それを無視すると、リフレクションで作業するときに微妙なエラーが発生することがあります。

関連する問題