web-dev-qa-db-ja.com

Androidプロガードを有効にしたユニットテスト

テストapkで使用されている場合でも、ProguardがデバッグAPKのメソッドを削除するという問題があります(メソッドdexファイルの制限のためにデバッグでproguardを実行する必要があります)。例えば。ユニットテストでGSONaddProeprtyメソッドを使用していますが、アプリapkでは使用していません。このメソッドは削除され、テストが失敗します。しかし、dexファイルの制限のためにすべてのGSOnを保持するようにproguardを構成したくはありませんが、すべてのメソッドを個別にリストしたくもありません。ユニットテストをソースコードのエントリポイントと見なすようにrpguardに指示する方法はありますか?

24
Denny1989

これが私がしたことです。

カスタムproguardルールファイルを追加します。

/ project/app/proguard-test-rules.pro

# Proguard rules that are applied to your test apk/code.
-ignorewarnings

-keepattributes *Annotation*

-dontnote junit.framework.**
-dontnote junit.runner.**

-dontwarn Android.test.**
-dontwarn Android.support.test.**
-dontwarn org.junit.**
-dontwarn org.hamcrest.**
-dontwarn com.squareup.javawriter.JavaWriter
# Uncomment this if you use Mockito
#-dontwarn org.mockito.**

アプリのbuild.gradleに以下を追加します。テスト時にproguardファイルを使用します。

/ project/app/build.gradle

Android {
    debug {
        minifyEnabled true
        testProguardFile 'proguard-test-rules.pro'
    }
}
39
theJosh

上記の答えのどれも私のためにトリックをしませんでした。 2つの問題がありました。テストにデフォルトのproguardファイルも使用する必要があり、デフォルトのproguardファイルが間違っていました。

  1. 独自のファイルに加えて、デフォルトのproguardファイルを使用するには:

    Android {
        debug {
            minifyEnabled true
            testProguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-project-test.pro'
        }
    }
    
  2. デフォルトのproguardファイル(およびすべてのtools/proguardフォルダー)は明らかに デフォルトでは置き換えられません Android studio。問題。proguardのデフォルト設定を更新するには、〜/ Library/Android/SDK/tools/proguard/proguard-Android.txtを this に置き換えます。

5
GLee

インストルメンテーションテスト(およびその他?)は、デバッグ/リリースapkと同じproguardファイルを使用しません。デバッグブロックとリリースブロック内でtestProguardFileオプションを設定してみてください。このテスト固有のproguardファイルは、デバッグ/リリースapkに使用されていないため、非常に寛容である可能性があります。

4
user823629

ビルドでこの問題を解決するには、proguardを有効にする「dev」buildTypeを追加しますが、すべてのコードを独自のパッケージに保持するように構成し、特定のライブラリクラスをいくつか使用します。テストからのみ。また、dev buildTypeで難読化を無効にして、IDEからデバッグできるようにします。

デバッグビルドとリリースビルドでは、難読化と最適化を含む「実際の」プロガード設定を使用します。

1
Karsten