その場合は、
- プロジェクトを構築する
- すべてのバイナリをクリーンアップする
- もう一度ビルドします(ソース/リソースなどは変更されていません)。
Proguard は同じ mapping.txt ファイルを提供することを保証しますか?
ProGuardは決定論的です。同じ入力に対して、同じ出力を生成します。
ただし、微妙な点が1つあります。オペレーティングシステムがディレクトリ内の入力ファイル(特にアーカイブ内にないクラスファイル)を異なる順序で一覧表示する場合、それらは異なる順序で処理される可能性があり、出力も異なる可能性があります。
実際に起こるかもしれませんが、プロガードがそれを保証するとは思いません。
マッピングの変更を避けるために、mapping.txt を再利用できるようにするProguard のドキュメントでこれを見つけました。
-applymapping ファイル名
以前の ProGuard の難読化実行で出力された名前マッピングを再利用することを指定します。マッピング ファイルにリストされているクラスとクラス メンバーには、指定された名前が付けられます。言及されていないクラスおよびクラス メンバーには、新しい名前が付けられます。マッピングは、入力クラスとライブラリ クラスを参照する場合があります。このオプションは、段階的な難読化、つまり既存のコードに対するアドオンや小さなパッチの処理に役立ちます。コードの構造が根本的に変更された場合、ProGuard は、マッピングの適用が競合を引き起こしているという警告を出力することがあります。両方の難読化実行でオプション -useuniqueclassmembernames を指定することで、このリスクを軽減できる場合があります。許可されるマッピング ファイルは 1 つだけです。難読化する場合にのみ適用されます。
保証が必要な場合は、難読化プロセスへの入力としてマッピングファイルを使用する必要があります。ただし、そのマッピングファイルに関連する競合に関するすべての警告を注意深く確認する必要があります。これを無視すると、リフレクションを操作するときに微妙なエラーが発生する可能性があります。