一部のクラスで -encryptclasses を指定して DexGuard を実行すると問題が発生します。この問題は、Robolectric 単体テストを実行している場合にのみ発生します。DexGuard によって難読化および暗号化されたすべてのクラスから NullPointerException が発生します。encryptclasses フラグをオフにすると、Robolectric で機能します。
この構成は、デバイスとエミュレーターでも機能します。Android 環境 (Dalvik および ART デバイスとエミュレーターでテスト済み) でアプリケーションを実行すると、問題なく動作します。Android インストルメンテーション テストも機能します。Robolectric を実行しているときにのみ、NullPointerException が発生します。DexGuard の暗号化クラスを無効にすると、Robolectric でもすべてが機能します。
DexGuard は、私が依存しているライブラリで使用されています。このライブラリは、gradle モジュールの libs フォルダーに追加されます。
これを Robolectric の問題として投稿しますが、DexGuard ツールのライセンスがないと再現できない可能性があります。
セットアップは次のとおりです。
- アンドロイドスタジオ 1.3.2
- Android Gradle プラグイン 1.3.1
- Android ビルド ツール バージョン 23.0.0
- Android compileSdkVersion 22
- オラクルJDK8
- Ubuntu 15.04 64 ビット
- デックスガードのバージョン: 5.5.00