2013-02-12 20 views
15

Piszę testy dla projektu Android już teraz i po prostu nie rozumiem, dlaczego jest to taki ból! Po całym dniu konfiguracji I wreszcie dostać to działa, ale teraz, po Pisałem kilka klas testowych IntelliJ IDEA stanowisk:Uruchomienie oprzyrządowania nie powiodło się z powodu "java.lang.IllegalAccessError"

Test failed to run to completion. Reason: 'Instrumentation run failed due to 'java.lang.IllegalAccessError''. Check device logcat for details 
Test running failed: Instrumentation run failed due to 'java.lang.IllegalAccessError' 

Testy biegałam tylko kilka minut temu nie można uruchomić więcej . Biorąc pod uwagę, cofnąłem się do ostatniego zatwierdzenia, w którym wszystko było idealne i nie zmieniałem żadnych ustawień, zastanawiam się tylko dlaczego.

Oto co logcat mówi:

02-12 20:16:09.398: E/AndroidRuntime(4922): FATAL EXCEPTION: main 
02-12 20:16:09.398: E/AndroidRuntime(4922): java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.actionbarsherlock.view.MenuInflater$MenuState.readItem(MenuInflater.java:327) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.actionbarsherlock.view.MenuInflater.parseMenu(MenuInflater.java:147) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.actionbarsherlock.view.MenuInflater.inflate(MenuInflater.java:97) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at <package>.ui.CheckPasswordActivity.onCreateOptionsMenu(CheckPasswordActivity.java:130) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.support.v4.app._ActionBarSherlockTrojanHorse.onCreatePanelMenu(_ActionBarSherlockTrojanHorse.java:45) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.actionbarsherlock.ActionBarSherlock.callbackCreateOptionsMenu(ActionBarSherlock.java:556) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchCreateOptionsMenu(ActionBarSherlockNative.java:60) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.actionbarsherlock.app.SherlockFragmentActivity.onCreatePanelMenu(SherlockFragmentActivity.java:154) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:407) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:769) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:201) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.view.Choreographer.doFrame(Choreographer.java:531) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.os.Handler.handleCallback(Handler.java:725) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.os.Handler.dispatchMessage(Handler.java:92) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.os.Looper.loop(Looper.java:137) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at java.lang.reflect.Method.invoke(Method.java:511) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-12 20:16:09.398: E/AndroidRuntime(4922):  at dalvik.system.NativeStart.main(Native Method) 

Chociaż nawet nie dotknął tej klasy linię CheckPasswordActivity: 130 odnosi się to tylko:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getSupportMenuInflater(); 
     inflater.inflate(R.menu.menu_check_password, menu); 
     return true; 
    } 
+0

brzmi jak pewien problem z zależnością z biblioteką wsparcia. sprawdź zależności ustawień twojego modułu testowego (F4 w IDEA), że zarówno biblioteka pomocnicza, jak i ActionBarSherlock są z "dostarczonymi" zakresami. –

+0

Czy możesz mi powiedzieć więcej proszę? Mam abs, moduł, w którym znajdują się moje źródła, bibliotekę wsparcia i moduł testowy, gdzie znajdują się moje testy. Jak powinny wyglądać te zależności? – Eugene

+0

W ustawieniach modułu upewnij się, że zakresy są podane dla ABS i biblioteki pomocy –

Odpowiedz

23

W końcu znalazłem rozwiązanie. Problem był z zależnościami rzeczywiście, to nadal nie wiadomo dlaczego jest używany do pracy, a potem nagle odmówił, ale o to jak Zależności powinien wyglądać dla modułu testowego:

enter image description here

więc w sumie trzeba aby upewnić się, że wszystkie twoje biblioteki i biblioteki projektów są wymienione dla twojego modułu testowego i oznaczone jako "Dostarczone" z wyjątkiem biblioteki Robotium, która jest "Kompilacja".

+0

To zadziałało dla mnie. W moim przypadku miałem również zależności od bibliotek Mockito. Zasadniczo oznaczyłem wszystkie zależności jako "Dostarczone", z wyjątkiem bibliotek, na które mój projekt testowy był bezpośrednio zależny. Oznaczono je jako "Kompiluj". –

1

podstawie your other question. .. Myślę, że mam nieco podobny układ jak ty ... Tutaj jest prawie jak ustalone są moje zależności (przeczytaj pod-pozycje jako zależności)

  • ActionBarSherlock
    • android-support-v4
  • Android Moduł
    • ActionBarSherlock
    • android-support-v4
  • Test jednostki
    • robotium
    • moduł Android

Wszystkie zależności są już skonfigurowane jako „kompilacji”

używam ActionBarSherlock z kodu źródłowego, a moduł ma „to projekt biblioteki” zaznaczone.

+0

Mam te same zależności, podwójnie je sprawdziłem, nie pomogłem - nadal nie mogę uruchomić niektórych testów z nieznanego powodu. – Eugene

0

Po prostu miałem ten sam problem, starając się zrobić to, co rozwiązało problem.

Usuń z biblioteki android-support-v4 lib (lub dowolną bibliotekę, która jest podwojona). Wyczyść projekty i zbuduj je ponownie.

0

Dodaj następujący wiersz:

manifestmerger.enabled=true 

do pliku project.properties swojej aplikacji projektu.

Czy poprawkę dla mnie :) Gdyby projekt z Biblioteki projektu

+0

gdzie dodajesz tę linię? –

+0

w pliku project.properties projektu eclipse (projekt testowy interfejsu użytkownika) – cV2

2

w moim przypadku, to ze względu na wchodzących zduplikowane słoików.

Powiązane problemy