20

ProGuardを使用してAndroidアプリケーションを最適化します。ただし、Androidインストルメンテーションテストでは、すべてのメンバーを維持するためにいくつかの(すべてではない)クラスが必要です。私はさまざまなアプローチを試しましたが、最後は次のとおりです。

-keepclassmembers public class com.mycompany.myclass {
    *;
}

しかし、驚くべきことに、私はまだ得ます

java.lang.NoSuchMethodError: com.mycompany.myclass.<init>

ここでの苦痛な部分は、2つのコンストラクターがあり、1つにはかなりの数のパラメーターがあることです。

クラスを完全に変更せず、ProGuardの影響を受けないようにするための正しい構文を知っている人はいますか?

4

2 に答える 2

23

さて、告白の時間です。問題はbollocksです。-keepclassmembers正しいです。チームメイトがコードを壊し、コンストラクターが本当にそこにいなかったために問題が発生しました。

クラス全体が最適化されるという変更がある場合は、-keepkharlesが提案したように使用{*;}する必要がありますが、すべてのメソッドが所定の位置にとどまるようにするために必要であることに注意してください。

{*;}はテスト専用であることに注意してください。本番環境では、よりきめ細かいアプローチを使用する必要があります。

私は同じ問題を抱えている人のために質問を続けます。

于 2011-04-08T09:25:52.203 に答える
0

試す

-keep public class com.mycompany.myclass

(keepを使用し、{*;}は使用しない)

于 2011-04-08T08:49:04.473 に答える