在我的android應用程序中,我啓用了多重索引。該應用程序在仿真器上運行良好。我正在使用robotium來測試應用程序。但是當我執行儀器測試用例時,有時測試通過,但大多數情況下,它們在系統重新啓動後也會失敗。它通過和失敗之間沒有代碼改變。儀器測試隨着多重索引啓用而失敗
默認配置的gradle:
android {
defaultConfig {
applicationId "com.example.androidapp"
minSdkVersion 16
targetSdkVersion 23
multiDexEnabled true
testInstrumentationRunner "com.android.test.runner.MultiDexTestRunner"
testProguardFile "proguard-test.txt"
}
}
另外添加依賴於測試:
androidTestCompile fileTree(dir: 'libs', include:'robotium-solo-5.3.0.jar')
androidTestCompile ('com.android.support:multidex-instrumentation:1.0.1') {
exclude group: 'com.android.support', module: 'multidex' }
在AndroidManifest.xml我所提到的應用程序標記爲:
<application
android:name="StartupActivity"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" ...../>
我已經擴展「StartupActivity」中的「android.support.multidex.MultiDexApplication」。的時候,儀器測試的情況下跌倒了,我得到以下錯誤:
INSTRUMENTATION_RESULT: shortMsg=java.lang.IllegalAccessError
INSTRUMENTATION_RESULT: longMsg=java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
INSTRUMENTATION_CODE: 0
在logcat中的錯誤信息是:
W/dalvikvm﹕ Class resolved by unexpected DEX: Lcom/example/androidapp/StartupActivity;(0xa695df08):0x9910e000 ref [Landroid/support/multidex/MultiDexApplication;] Landroid/support/multidex/MultiDexApplication;(0xa695df08):0x99a2c000
W/dalvikvm﹕ (Lcom/example/androidapp/StartupActivity; had used a different Landroid/support/multidex/MultiDexApplication; during pre-verification)
W/dalvikvm﹕ Unable to resolve superclass of Lcom/example/androidapp/StartupActivity; (540)
W/dalvikvm﹕ Link of class 'Lcom/example/androidapp/StartupActivity;' failed
D/AndroidRuntime﹕ Shutting down VM
W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xa628c288)
測試類頗像:
public class HelloActivityTest extends ActivityInstrumentationTestCase2<HelloActivity> {
private Solo solo;
public HelloActivityTest() {
super(HelloActivityTest.class);
}
@Override
public void setUp() throws Exception {
setActivityInitialTouchMode(false);
solo = new Solo(getInstrumentation(), getActivity());
}
public void test1() {}
public void test2() {}
}
我我正在運行測試用例作爲android測試。我無法理解哪個依賴關係搞亂了代碼。除此之外,代碼的隨機失敗是懷疑的。請幫忙。
我的團隊成員對espresso測試和multidex有類似的評論。更多的是,它沒有確定有測試運行multidex使能... – OceanLife
@OceanLife你有沒有找到任何解決方案? – whitepearl
不,我們還沒有。沒有multidex,它是可靠的,因此我建議我們編譯出一些分析庫,這些庫是作爲臨時解決方案來擴充的......只是爲了回到不需要multidex。你的錯誤信息(意外的impl)讓我想起了Java的SDK不兼容性錯誤,所謂的「VerifyError」(s)...在旅途中得到一些proguarding去除龐大的位... – OceanLife