4.4 / Kitkat未満のAndroidバージョンで実行すると激しくクラッシュするAndroidテストがいくつかあります。
これらは、私のbuild.gradleにあるライブラリです
androidTestCompile 'org.mockito:mockito-core:1.9.5'
androidTestCompile 'com.google.dexmaker:dexmaker:1.1'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.1'
テストは Android バージョン 4.4 で期待どおりに実行されますが、キャッシュを配置する場所を Dexmaker に伝えるためにいくつかのヒントを追加する必要がありました。
System.setProperty("dexmaker.dexcache", getInstrumentation().getContext().getCacheDir().getPath());
デバイスからの logcat 出力は次のとおりです。
D/dalvikvm( 1712): GC_FOR_ALLOC は 479K を解放し、19% は 2532K/3124K を解放し、3 ミリ秒を一時停止し、合計 3 ミリ秒 D/dalvikvm( 1712): GC_CONCURRENT 解放 427K、18% 解放 2595K/3136K、一時停止 1ms+0ms、合計 3ms D/dalvikvm( 1712): GC_CONCURRENT 解放 311K、16% 解放 2686K/3188K、一時停止 3ms+0ms、合計 4ms D/dalvikvm( 1712): GC_FOR_ALLOC は 127K を解放し、11% は 2852K/3188K を解放し、1 ミリ秒を一時停止し、合計 1 ミリ秒 D/dalvikvm( 1712): GC_FOR_ALLOC は 123K を解放し、7% は 3239K/3476K を解放し、4 ミリ秒を一時停止し、合計 4 ミリ秒 D/dalvikvm( 1712): GC_CONCURRENT が 53K を解放、3276K/3476K を 6% 解放、一時停止 2ms+0ms、合計 10ms D/dalvikvm(1712): DexOpt: --- BEGIN 'Generated-1815896169.jar' (bootstrap=0) --- D/dalvikvm(1728): DexOpt: ロード 1ms、verify+opt 0ms、82180 バイト D/dalvikvm(1712): DexOpt: --- END 'Generated-1815896169.jar' (成功) --- D/dalvikvm(1712): DEX prep '/data/data/my.app.identifier/cache/Generated-1815896169.jar': 0ms で解凍、15ms で書き換え I/dalvikvm(1712): DexOpt: 不正なメソッド アクセス (Ljava/lang/Object;.internalClone (Ljava/lang/Cloneable;)Ljava/lang/Object; from LBackendAddressServiceImpl_Proxy; を呼び出します) I/dalvikvm (1712): メソッド my.app.identifier.backend.BackendAddressServiceImpl.internalClone が見つかりませんでした。メソッド BackendAddressServiceImpl_Proxy.internalClone から参照されています。 W/dalvikvm(1712): VFY: 仮想メソッド 50 を解決できません: Lmy/app/identifier/backend/BackendAddressServiceImpl;.internalClone (Ljava/lang/Cloneable;)Ljava/lang/Object; D/dalvikvm( 1712): VFY: オペコード 0x6f を 0x0019 に置き換えます I/dalvikvm(1712): DexOpt: 不正なメソッド アクセス (Ljava/lang/Object;.internalClone (Ljava/lang/Cloneable;)Ljava/lang/Object; from LBackendAddressServiceImpl_Proxy; を呼び出します) I/dalvikvm(1712): メソッド my.app.identifier.backend.BackendAddressServiceImpl.internalClone が見つかりませんでした。メソッド BackendAddressServiceImpl_Proxy.super$internalClone$java_lang_Object から参照されています W/dalvikvm(1712): VFY: 仮想メソッド 50 を解決できません: Lmy/app/identifier/backend/BackendAddressServiceImpl;.internalClone (Ljava/lang/Cloneable;)Ljava/lang/Object; D/dalvikvm( 1712): VFY: オペコード 0x6f を 0x0000 に置き換えます D/dalvikvm( 1712): GC_FOR_ALLOC は 652K を解放し、20% は 3138K/3904K を解放し、4 ミリ秒を一時停止し、合計 4 ミリ秒 D/dalvikvm(1712): DexOpt: --- BEGIN 'Generated1066861752.jar' (bootstrap=0) --- D/dalvikvm( 1712): GC_CONCURRENT が 44K を解放、21% が 3103K/3904K を解放、一時停止 0ms+1ms、合計 2ms D/dalvikvm(1729): DexOpt: ロード 0ms、verify+opt 0ms、81004 バイト D/dalvikvm(1712): DexOpt: --- END 'Generated1066861752.jar' (成功) --- D/dalvikvm(1712): DEX prep '/data/data/my.app.identifier/cache/Generated1066861752.jar': 0ms で解凍、13ms で書き換え I/dalvikvm(1712): DexOpt: 不正なメソッド アクセス (Ljava/lang/Object;.internalClone (Ljava/lang/Cloneable;)Ljava/lang/Object; from LAppConfigServiceImpl_Proxy; を呼び出します) I/dalvikvm (1712): メソッド my.app.identifier.config.AppConfigServiceImpl.internalClone が見つかりませんでした。メソッド AppConfigServiceImpl_Proxy.internalClone から参照されています W/dalvikvm(1712): VFY: 仮想メソッド 17 を解決できません: Lmy/app/identifier/config/AppConfigServiceImpl;.internalClone (Ljava/lang/Cloneable;)Ljava/lang/Object; D/dalvikvm( 1712): VFY: オペコード 0x6f を 0x0019 に置き換えます I/dalvikvm(1712): DexOpt: 不正なメソッド アクセス (Ljava/lang/Object;.internalClone (Ljava/lang/Cloneable;)Ljava/lang/Object; from LAppConfigServiceImpl_Proxy; を呼び出します) I/dalvikvm(1712): メソッド my.app.identifier.config.AppConfigServiceImpl.internalClone が見つかりませんでした。メソッド AppConfigServiceImpl_Proxy.super$internalClone$java_lang_Object から参照されています W/dalvikvm(1712): VFY: 仮想メソッド 17 を解決できません: Lmy/app/identifier/config/AppConfigServiceImpl;.internalClone (Ljava/lang/Cloneable;)Ljava/lang/Object; D/dalvikvm( 1712): VFY: オペコード 0x6f を 0x0000 に置き換えます D/dalvikvm( 1712): GC_CONCURRENT が 536K を解放、22% が 3078K/3904K を解放、一時停止 1ms+1ms、合計 7ms D/dalvikvm (1712): WAIT_FOR_CONCURRENT_GC が 3 ミリ秒ブロックされました D/dalvikvm( 1712): GC_FOR_ALLOC は 492K を解放し、21% は 3098K/3904K を解放し、2 ミリ秒を一時停止し、合計 2 ミリ秒 D/dalvikvm( 1712): GC_FOR_ALLOC は 468K を解放し、20% は 3142K/3904K を解放し、2 ミリ秒を一時停止し、合計 2 ミリ秒 D/dalvikvm( 1712): GC_CONCURRENT 解放 247K、19% 解放 3174K/3904K、一時停止 2ms+0ms、合計 4ms F/libc (1712): 0x00000000 で致命的なシグナル 11 (SIGSEGV) (コード = 1)、スレッド 1725 (ationTestRunner) I/DEBUG ( 109): *** *** *** *** *** *** *** *** *** *** *** *** *** * ** *** I/DEBUG ( 109): ビルド フィンガープリント: 'generic/vbox86p/vbox86p:4.2.2/JDQ39E/eng.buildbot.20140523.235904:userdebug/test-keys' I/DEBUG ( 109): リビジョン: '0' 私/デバッグ (109): pid: 1712、tid: 1725、名前: ationTestRunner >>> my.app.identifier 私/デバッグ (109): I/DEBUG (109): スタック: 私/デバッグ (109): 98c5bba0 00000000 私/デバッグ (109): 98c5bba4 00000000 私/デバッグ (109): 98c5bba8 00000000 私/デバッグ (109): 98c5bbac 00000000 私/デバッグ (109): 98c5bbb0 00000000 私/デバッグ (109): 98c5bbb4 00000000 私/デバッグ (109): 98c5bbb8 00000000 私/デバッグ (109): 98c5bbbc 00000000 私/デバッグ (109): 98c5bbc0 00000000 私/デバッグ (109): 98c5bbc4 00000000 私/デバッグ (109): 98c5bbc8 00000000 私/デバッグ (109): 98c5bbcc 00000000 私/デバッグ (109): 98c5bbd0 00000000 私/デバッグ (109): 98c5bbd4 00000000 私/デバッグ (109): 98c5bbd8 00000000 私/デバッグ (109): 98c5bbdc 00000000 I/DEBUG ( 109): #00 98c5bbe0 a652fb68 /dev/ashmem/dalvik-heap (削除済み) 私/デバッグ (109): 98c5bbe4 a6487fe8 /dev/ashmem/dalvik-heap (削除) I/DEBUG (109): 98c5bbe8 a647f1c0 /dev/ashmem/dalvik-heap (削除済み) 私/デバッグ (109): 98c5bbec b66af3d1 /system/lib/libdvm.so (dvmRemoveFromReferenceTable(ReferenceTable*, Object**, Object*)+33) 私/デバッグ (109): 98c5bbf0 b6752ca0 /system/lib/libdvm.so 私/デバッグ (109): 98c5bbf4 b6751ff4 /system/lib/libdvm.so 私/デバッグ (109): 98c5bbf8 00000000 私/デバッグ (109): 98c5bbfc b66b3fd4 /system/lib/libdvm.so (dvmThreadSelf()+36) 私/デバッグ (109): 98c5bc00 00000007 I/DEBUG (109): 98c5bc04 a652fc08 /dev/ashmem/dalvik-heap (削除済み) I/DEBUG (109): 98c5bc08 a647f198 /dev/ashmem/dalvik-heap (削除済み) 私/デバッグ (109): 98c5bc0c b6751ff4 /system/lib/libdvm.so 私/デバッグ (109): 98c5bc10 b7d30a28 [ヒープ] I/DEBUG (109): 98c5bc14 a647f180 /dev/ashmem/dalvik-heap (削除済み) 私/デバッグ (109): 98c5bc18 98c5bcb8 [スタック:1725] 私/デバッグ (109): 98c5bc1c b66ba5b7 /system/lib/libdvm.so (dvmReleaseTrackedAlloc+71) I/DEBUG (109): ................ 私/デバッグ (109): #01 98c5bcc0 b7d30a28 [ヒープ] 私/デバッグ (109): 98c5bcc4 00000000 私/デバッグ (109): 98c5bcc8 00000000 私/デバッグ (109): 98c5bccc 00000000 私/デバッグ (109): 98c5bcd0 00000000 私/デバッグ (109): 98c5bcd4 b6751ff4 /system/lib/libdvm.so 私/デバッグ (109): 98c5bcd8 b7d30a28 [ヒープ] I/DEBUG (109): 98c5bcdc b665bd72 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+178) 私/デバッグ (109): 98c5bce0 b7d30a28 [ヒープ] 私/デバッグ (109): 98c5bce4 00000000 私/デバッグ (109): 98c5bce8 b7596339 /system/lib/libc.so (pthread_mutex_lock+9) 私/デバッグ (109): 98c5bcec b761eff4 /system/lib/libc.so 私/デバッグ (109): 98c5bcf0 b7cf4e98 [ヒープ] 私/デバッグ (109): 98c5bcf4 00000018 私/デバッグ (109): 98c5bcf8 b7cf4e68 [ヒープ] 私/デバッグ (109): 98c5bcfc b7596509 /system/lib/libc.so (pthread_mutex_unlock+25) I/DEBUG (109): ................ I/DEBUG ( 109): #02 b7d30a30 9f27f620 /dev/ashmem/dalvik-LinearAlloc (削除済み) I/DEBUG (109): b7d30a34 9eee8000 /dev/ashmem/dalvik-aux-structure (削除済み) I/DEBUG (109): b7d30a38 a647f180 /dev/ashmem/dalvik-heap (削除済み) 私/デバッグ (109): b7d30a3c 00000000 私/デバッグ (109): b7d30a40 98c5bc70 [スタック:1725] 私/デバッグ (109): b7d30a44 00000000 私/デバッグ (109): b7d30a48 98c5bd1c [スタック:1725] 私/デバッグ (109): b7d30a4c 0000000a 私/デバッグ (109): b7d30a50 00000000 私/デバッグ (109): b7d30a54 b665611c /system/lib/libdvm.so 私/デバッグ (109): b7d30a58 00000000 私/デバッグ (109): b7d30a5c 00000000 私/デバッグ (109): b7d30a60 9edb6670 /system/framework/ext.jar 私/デバッグ (109): b7d30a64 98c5c300 私/デバッグ (109): b7d30a68 00000000 私/デバッグ (109): b7d30a6c 00000000 D/AndroidRuntime(1704): VM をシャットダウンしています I/ActivityManager( 464): プロセス my.app.identifier (pid 1712) が停止しました。 W/ActivityManager( 464): アプリ my.app.identifier 実行中のインストルメンテーション ComponentInfo{my.app.identifier.test/android.test.InstrumentationTestRunner} のクラッシュ D/dalvikvm( 1704): GC_CONCURRENT は 100K を解放し、19% は 462K/568K を解放し、一時停止 0ms+0ms、合計 2ms D/jdwp (1704): ウェイクアップ シグナルを受信しました。選択を解除しました D/dalvikvm(1704): デバッガーが切り離されました。オブジェクト レジストリには 1 個のエントリがありました I/ActivityManager( 464): パッケージの強制停止 my.app.identifier appid=10048 user=0 D/Zygote (198): プロセス 1712 がシグナルによって終了しました (11) W/ThrottleService( 464): iface rmnet0 の統計情報が見つかりません
「古い」AndroidバージョンでMockito / Dexmakerを実行する際のヒントはありますか?