13

私が取り組んでいるアプリはGradleで構築されています。機器テストの依存関係としてエスプレッソを追加しようとしています。アプリ自体にはいくつかの依存関係があり、そのうちの 1 つが Guava 15.0 です。これを機能させるために、明示的な依存関係を持つバージョンの Espresso を使用し、バンドルされている Guava を除外します (代わりに独自のものを使用します)。

dependencies {
   ...
   instrumentTestCompile fileTree(dir: 'libs/espresso-dependencies', include: '*.jar')
   compile 'com.google.guava:guava:15.0' 
   ...
}

でビルドしようとするとgradle connectedInstrumentTest、メソッドとクラスが見つからないことに関連するエラーが発生します。

java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkState
at com.google.android.apps.common.testing.ui.espresso.base.InputManagerEventInjectionStrategy.<init>(InputManagerEventInjectionStrategy.java:35)

-keep class com.google.common.** { *; }Proguard 構成に追加すると、すべてが正常に機能します。起こっているように見えるのは、Proguard がメイン アプリで使用されるクラスのみを分析しており、インストルメント テストの依存関係による使用を探していないことです。メイン アプリでは使用されていないが、計測器のテストに必要なメソッド/クラスは、最適化されているように見えます。

Espresso とその依存関係に必要な Guava クラス/メソッドを Proguard に保持させるにはどうすればよいですか? それらをすべて手動で指定することは現実的ではないように思われ (多くの使用法があります)、それらすべてを保持することは Proguard の目的を無効にします。

4

2 に答える 2

11

これが私のために働いたものです:

build.gradle で、次の行を defaultConfig セクションに追加しました。

testProguardFile "test-proguard-rules.pro"

次に、次の内容で test-proguard-rules.pro を作成しました。

-dontobfuscate
-dontwarn

これにより、計測テストを含むテスト apk にこの別の proguard 構成を使用するよう gradle に指示されます。この場合、proguard にテスト apk を難読化しないように指示していますが、これはおそらく必要なことです。テストしているメインの apk は、既存の proguard 構成を使用して難読化されます。

于 2015-06-25T15:26:16.400 に答える
-9

絶対に必要な場合を除き、テスト中に apk をプロガードしないでください。

于 2013-12-14T04:34:06.957 に答える