2015-06-23 5 views
1

Я недавно модернизировал свой Robolectric от 2,4 в 3.0-RC3 и после того, как много борьбы с ним , я сузили его до этой последней ошибки, где несколько случаев не из-за этого вопроса:

java.lang.NoClassDefFoundError: android/support/v7/appcompat/R$styleable 

Он проходит как 99% случаев, но некоторые из них терпят неудачу из-за этого. Остальные компоненты моего приложения проходят с яркими цветами, и я видел, как это происходит в моем модуле.

Я искал его, и кажется, что проблема связана с Robolectrie 3.0, не генерируя файлы R.java. Тем не менее, похоже, для этого не было никакого решения, за исключением некоторого build.gradle взлома, который не работал для меня. Я также уже пробовал редактировать targetSDK и убедиться, что тема AppCompat установлена ​​в манифесте, но безрезультатно.

build.gradle:

apply from: rootProject.file('src/build/groovy/android-library.gradle') 

dependencies { 
    compile project(':myApplication') 

    compile('com.application:player:') { 
    exclude module: 'support-v4' 
} 


    compile "com.android.support:support-v4:19.1.0" 
    compile 'com.android.support:cardview-v7:21.0.+' 
    compile "com.android.support:appcompat-v7:22.1.0" 
} 

Кто-нибудь есть какие-либо идеи, как это исправить? Это тонет много моего времени!

+1

Здесь есть открытая проблема с Robolectric: https://github.com/robolectric/robolectric/issues/1796 –

+0

Одна вещь, которую я вижу здесь, вы должны использовать 'com.android.support:appcompat-v7:22.2. 0', а версия v4 должна быть такой же, но она уже включена в 'appcompat'. Убедитесь, что ваш «cardview» также обновлен. –

ответ

0

Robolectric 3.0 начал разделять несколько классов теней на различные артефакты. Вероятно, вам просто нужно добавить shadows-support-v4 в качестве зависимости (при сохранении зависимостей *-v7 от com.android.support).

+0

Возможно? Вы проверили это? –

+0

Я говорю «возможно», потому что у меня также был «NoClassDefFoundError», но для другого класса, и я смог его решить, добавив «shadows-httpclient» в список зависимостей. OP находится в лучшем положении, чтобы действительно проверить это. – sschuberth

+0

Имея только v4, недостаточно, нам также нужен v7. – milosmns

0

У меня была такая же проблема.

Это то, что я сделал, чтобы исправить это.

Предположим, вы включили следующие библиотеки поддержки-v4, AppCompat LIB com.android.support.v7 в, robolectric 3.0 и JUnit и ссылку на apkib тестируемому (в соответствии с sschuberth и другими участниками этого потока)

Предположим, что тестируемая активность XXXActivity. Для того, чтобы заполнить наш контекст, в нашем случае модульного тестирования - мы используем Robolectric.buildActivity(XXXActivity.class).create().start().resume().get();

Я изменил его Robolectric.buildActivity(XXXMockActivity.class).create().start().resume().get();

где XXXMockActivity просто задает тему перед вызовом super.onCreate().

public class XXXMockActivity extends XXXActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     setTheme(R.style.Theme_AppCompat_Light_DarkActionBar); 
     super.onCreate(savedInstanceState); 
    } 
} 
+0

Вы протестировали это? –

+0

Да, я тестировал это до того, как 3.0 стал стабильным. Не тестировалось с последней версией 3.0. –

+0

Это не работает для меня, потому что компиляция не работает (R не найден) – milosmns

0

Я просто проигнорировал тест - похоже, не существует решения этой проблемы. Поскольку кто-то прокомментировал мой первоначальный вопрос, это открытый вопрос, который можно найти здесь: github.com/robolectric/robolectric/issues/1796

Если у вас такая же проблема, я бы не потратил на это слишком много времени ,

+0

Я разместил эту проблему в комментариях. Думаю, тебе стоит подождать. Это происходит только в моих библиотечных проектах. –

Смежные вопросы