1

ProGuard を使用して Android アプリの難読化と最適化を行っており、これまではすべてのクラス/マージの最適化を有効にしてきました。これの問題点は、別のクラスに水平方向にマージされたメソッドでエラーが発生した場合、リトレース ツールはそのステップを元に戻さないため、行番号が役に立たなくなり、エラーを追跡することが不可能になることです。

私たちがたった今持っていた特異な例の 1 つは、私たちがリンクしたサードパーティ JAR の一部であるクラスにマージされた静的ヘルパー メソッドでした。そのためのソース コードすらありません。retrace はそのサードパーティ クラス内の行番号を表示するため (ヘルパー メソッドがマージされたため)、先に進むことができません。

最適化中に他のクラスにマージされたメソッドをたどる方法はありますか?

4

1 に答える 1

1

標準のJavaクラスファイル形式は、最終的に単一のクラスファイルになるさまざまなソースファイルに関するデバッグ情報を表す方法を提供しません(ただし、dalvik形式は提供します)。したがって、ProGuardはクラスをマージできますが、すべてのデバッグ情報をマージできるわけではありません。スタックトレース内のマージされたクラスを参照する行は、これらのクラスの1つの名前を取得します。ただし、行番号は引き続き元のソースファイルを参照しているため、役立つ場合があります。

ただし、さらに複雑にするために、インラインメソッドは呼び出しの行番号を取得します。このデバッグ情報の喪失は、スタックトレースとその難読化解除にも影響を与える可能性があります。

于 2012-07-04T13:57:09.927 に答える