2015-12-22 2 views
0

Как указано, я недавно получил исключение NoClassDefFoundError при запуске моего теста на Android. И класс - это пользовательский класс. Я знаю, что это может быть проблема пути к классам, но я не знаю где установить путь к классам на Ubuntu.Как проверить classpath для Android Studio на Ubuntu

[UPDATE]

Это класс, который вызывает ошибку, когда getIdlingResource() называется:

public final class ToastManager { 
    private static final CountingIdlingResource idlingResource = new CountingIdlingResource("toast"); 
    private static final View.OnAttachStateChangeListener listener = new View.OnAttachStateChangeListener() { 
    @Override 
    public void onViewAttachedToWindow(final View v) { 
     idlingResource.increment(); 
    } 

    @Override 
    public void onViewDetachedFromWindow(final View v) { 
     idlingResource.decrement(); 
    } 
}; 

private ToastManager() { } 

public static Toast makeText(final Context context, final CharSequence text, final int duration) { 
    Toast t = Toast.makeText(context, text, duration); 
    t.getView().addOnAttachStateChangeListener(listener); 
    return t; 
} 

// For testing 
public static IdlingResource getIdlingResource() { 
    return idlingResource; 
} 
} 

Это журнал ошибок:

java.lang.NoClassDefFoundError: com/idreamsglobal/idreams/utils/ToastUtil 
at com.idreamsglobal.idreams.RegisterActivityTest.tearDown(RegisterActivityTest.java:168) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:33) 
at android.support.test.internal.statement.UiThreadStatement.evaluate(UiThreadStatement.java:55) 
at android.support.test.rule.ActivityTestRule$ActivityStatement.evaluate(ActivityTestRule.java:257) 
at org.junit.rules.RunRules.evaluate(RunRules.java:20) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runners.Suite.runChild(Suite.java:128) 
at org.junit.runners.Suite.runChild(Suite.java:27) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) 
at org.junit.runner.JUnitCore.run(JUnitCore.java:115) 
at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:54) 
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:240) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1741) 
+0

'может быть проблемой классаpath' Вы уверены? –

+0

Прочтите http://examples.javacodegeeks.com/java-basics/exceptions/java-lang-noclassdeffounderror-how-to-solve-no-class-def-found-error/ –

+0

Я обновил свой пост. что-нибудь связанное с ExceptionInInitializerError? –

ответ

0

Я решил проблему сочетая ответы Джерома и Джарода:

  1. Установка JDK - sudo apt-get install openjdk-7-jdk
  2. Environment Variable - sudo nano /etc/environment добавив следующую строку:
  3. JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-i386
  4. Reboot, и Android-студия запускается. (Я добавил также ссылку на studio.sh в главное меню).

Также я только что нашел https://stackoverflow.com/a/17827697/2533809, который, кажется, имеет хорошую рецензию, почти такой же ответ.

(я использую Debian 7 астматический)

Reference link

0

В 'проекта' щелкните правой кнопкой мыши на модуле 'приложения' и выберите 'Настройки Open Module'. Затем нажмите на вкладку «Зависимости» вверху. В поле ниже будет указан путь к классам. По умолчанию он также включает * .jar.

Если ToastUtil, что вы используете, находится в банке, я думаю, он должен быть добавлен по умолчанию. Однако попробуйте добавить эту банку вручную под зависимостями. Если это файл, который вы написали, проверьте, правильно ли вы импортировали его.

Также попробуйте переместить файл из проекта с помощью терминала и создать код для ошибок. А затем добавьте его снова в соответствующий пакет и попробуйте создать чистую сборку. Иногда это делало бы трюк.

Надеюсь, что это поможет!