1

一部のクラスで -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
4

1 に答える 1

1

Robolectric は Reflection を非常に集中的に使用しており、あらゆる種類の難読化によってこの機能が非常に簡単に破られてしまいます。

dexguarding をオフにするテスト目的でビルド構成を作成します。デフォルトでコードを難読化しない debug by default と同じです。

単体テストの問題は、機能の小さな部分をテストすることであり、ビルドプロセスと難読化とコード機能の組み合わせをテストすることではありません。

私はまた、dexguard が正しい場所で難読化を行っているかどうかをチェックする DexGuard の人々に手紙を書きます。VMでRobolectricテストを実行することは、まだ難読化されるべきではないという私の理解

于 2015-08-28T05:22:08.387 に答える