テストapkで使用されている場合でも、ProguardがデバッグAPKのメソッドを削除するという問題があります(メソッドdexファイルの制限のためにデバッグでproguardを実行する必要があります)。例えば。ユニットテストでGSONaddProeprtyメソッドを使用していますが、アプリapkでは使用していません。このメソッドは削除され、テストが失敗します。しかし、dexファイルの制限のためにすべてのGSOnを保持するようにproguardを構成したくはありませんが、すべてのメソッドを個別にリストしたくもありません。ユニットテストをソースコードのエントリポイントと見なすようにrpguardに指示する方法はありますか?
これが私がしたことです。
カスタム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'
}
}
上記の答えのどれも私のためにトリックをしませんでした。 2つの問題がありました。テストにデフォルトのproguardファイルも使用する必要があり、デフォルトのproguardファイルが間違っていました。
独自のファイルに加えて、デフォルトのproguardファイルを使用するには:
Android {
debug {
minifyEnabled true
testProguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-project-test.pro'
}
}
デフォルトのproguardファイル(およびすべてのtools/proguard
フォルダー)は明らかに デフォルトでは置き換えられません Android studio。問題。proguardのデフォルト設定を更新するには、〜/ Library/Android/SDK/tools/proguard/proguard-Android.txtを this に置き換えます。
インストルメンテーションテスト(およびその他?)は、デバッグ/リリースapkと同じproguardファイルを使用しません。デバッグブロックとリリースブロック内でtestProguardFile
オプションを設定してみてください。このテスト固有のproguardファイルは、デバッグ/リリースapkに使用されていないため、非常に寛容である可能性があります。
ビルドでこの問題を解決するには、proguardを有効にする「dev」buildType
を追加しますが、すべてのコードを独自のパッケージに保持するように構成し、特定のライブラリクラスをいくつか使用します。テストからのみ。また、dev buildType
で難読化を無効にして、IDEからデバッグできるようにします。
デバッグビルドとリリースビルドでは、難読化と最適化を含む「実際の」プロガード設定を使用します。