Тестирование проекта Android с помощью jar-зависимостей

#android #testing

#Android #тестирование

Вопрос:

В моем Android-проекте есть несколько библиотек jar в качестве зависимостей. Сам по себе он компилируется и работает хорошо. Я написал небольшой тестовый проект, но, запустив его, я не получаю ни результата (тесты не пройдены или не завершены с ошибкой), ни какой-либо ошибки, но в выходных данных logcat есть предупреждения, подобные этому:

06-06 14:55:43.533: INFO / dalvikvm(7049): Не удалось разрешить Lcom / adwhirl /adapters /InMobiAdapter; интерфейс 315 'Lcom/inmobi /androidsdk/InMobiAdDelegate;'
06-06 14:55:43.533: ПРЕДУПРЕЖДЕНИЕ / dalvikvm(7049): ошибка ссылки класса 'Lcom / adwhirl /adapters /InMobiAdapter;'
06-06 14:55:43.533: INFO / dalvikvm(7049): Не удалось разрешить Lcom / adwhirl /adapters /InMobiAdapter; интерфейс 407 'Lcom/inmobi /androidsdk/InMobiAdDelegate;'
06-06 14:55:43.533: ПРЕДУПРЕЖДЕНИЕ / dalvikvm(7049): ошибка ссылки класса 'Lcom / adwhirl /adapters /InMobiAdapter;'
06-06 14:55:43.553: DEBUG / dalvikvm(7049): GC_CONCURRENT освободил 471 КБ, освободил 51% 2880 КБ / 5831 КБ, внешний 0 КБ / 0 КБ, приостановлен на 2 мс   4 мс
06-06 14:55:43.553: ПРЕДУПРЕЖДЕНИЕ / ClassPathPackageInfoSource(7049): не удается загрузить класс. Убедитесь, что он есть в вашем apk. Имя класса: 'com.adwhirl.adapters.InMobiAdapter'. Сообщение: com.adwhirl.adapters.InMobiAdapter
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): java.lang.Исключение ClassNotFoundException: com.adwhirl.adapters.InMobiAdapter
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): на java.lang.Class.classForName(собственный метод)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): на java.lang.Class.forName(Class.java:234)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): в android.test.ClassPathPackageInfoSource.createPackageInfo (ClassPathPackageInfoSource.java:89)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): в android.test.Доступ к ClassPathPackageInfoSource.$000 (ClassPathPackageInfoSource.java:40)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): в android.test.ClassPathPackageInfoSource $ 1.загрузить (ClassPathPackageInfoSource.java:51)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): в android.test.ClassPathPackageInfoSource $ 1.загрузить (ClassPathPackageInfoSource.java:48)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): в android.test.SimpleCache.get(SimpleCache.java:31)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): в android.test.ClassPathPackageInfoSource.getPackageInfo (ClassPathPackageInfoSource.java:73)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): в android.test.ClassPathPackageInfo.getSubpackages(ClassPathPackageInfo.java:48)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): в android.test.ClassPathPackageInfo.addTopLevelClassesTo(ClassPathPackageInfo.java:61)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): в android.test.ClassPathPackageInfo.getTopLevelClassesRecursive(ClassPathPackageInfo.java:55)
06-06 14:55:43.553: ПРЕДУПРЕЖДЕНИЕ / ClassPathPackageInfoSource(7049): в android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:154)
06-06 14:55:43.553: ПРЕДУПРЕЖДЕНИЕ / ClassPathPackageInfoSource(7049): в android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:115)
06-06 14:55:43.553: ПРЕДУПРЕЖДЕНИЕ / ClassPathPackageInfoSource(7049): в android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:103)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): в android.test.Инструментальный тестировщик.onCreate (инструментальный тестировщик.java: 360)
06-06 14:55:43.553: ПРЕДУПРЕЖДЕНИЕ / ClassPathPackageInfoSource(7049): в android.app.ActivityThread.handleBindApplication (ActivityThread.java:3398)
06-06 14:55:43.553: WARN/ ClassPathPackageInfoSource(7049): на android.app.ActivityThread.access $ 2200 (ActivityThread.java:123)
06-06 14:55:43.553: ПРЕДУПРЕЖДЕНИЕ / ClassPathPackageInfoSource(7049): в android.app.ActivityThread$H.handleMessage (ActivityThread.java:977)
06-06 14:55:43.553: ПРЕДУПРЕЖДЕНИЕ / ClassPathPackageInfoSource(7049): в android.os.Handler.DispatchMessage(Handler.java:99)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): в android.os.Looper.loop(Looper.java:130)
06-06 14:55:43.553: WARN/ ClassPathPackageInfoSource(7049): в android.app.ActivityThread.main (ActivityThread.java:3835)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): на java.lang.reflect.Метод.invokeNative (собственный метод)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): на java.lang.reflect.Метод.invoke(Method.java:507)
06-06 14:55:43.553: ПРЕДУПРЕЖДЕНИЕ / ClassPathPackageInfoSource(7049): в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
06-06 14:55:43.553: WARN/ ClassPathPackageInfoSource(7049): в dalvik.system.NativeStart.main (собственный метод)
06-06 14:55:43.553: ПРЕДУПРЕЖДЕНИЕ / ClassPathPackageInfoSource(7049): вызвано: java.lang.Ошибка в NoClassDefFoundError: com.adwhirl.adapters.InMobiAdapter
06-06 14:55:43.553: ПРЕДУПРЕЖДЕНИЕ / ClassPathPackageInfoSource(7049): ... еще 26
06-06 14:55:43.553: ПРЕДУПРЕЖДЕНИЕ / ClassPathPackageInfoSource(7049): вызвано: java.lang.Исключение ClassNotFoundException: com.adwhirl.adapters.InMobiAdapter в загрузчике dalvik.system.PathClassLoader[/system/framework/android.test.runner.jar:/data/app/com.mypackage.test-1.apk:/data/app/com.mypackage-2.apk]
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): в dalvik.system.PathClassLoader.FindClass(PathClassLoader.java:240)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): на java.lang.ClassLoader.loadClass(ClassLoader.java:551)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): на java.lang.ClassLoader.loadClass(ClassLoader.java:511)
06-06 14:55:43.553: ПРЕДУПРЕЖДЕНИЕ / ClassPathPackageInfoSource(7049): ... еще 26

Как вы можете видеть, кажется, что есть проблема с экспортом библиотек, фактически я получаю подобную ошибку для каждой библиотеки. Я прочитал в этом сообщении в блоге, что для того, чтобы заставить его работать, должно быть достаточно экспортировать все библиотеки в основной проект, но для меня это не сработало. Есть еще идеи?

Комментарии:

1. Вы когда-нибудь получали решение для этого? Я также попробовал предлагаемые решения / blog, но все равно не добился успеха.

2. Предложенное решение для меня тоже не работает. В случае, если это имеет значение, моя отсутствующая библиотека зависит от собственной библиотеки (которая безупречно загружается в моем основном проекте)

Ответ №1:

Перейдите к своему проекту, который использует файлы .jar (т. е. тестируемый проект). Нажмите правую кнопку мыши -> Свойства-> Путь сборки Java -> Заказать и экспортировать -> проверить библиотеки там

введите описание изображения здесь

Комментарии:

1. У меня такая же проблема с использованием Maven. Что мне нужно сделать?

Ответ №2:

что сработало для меня, так это то, что в разделе «Порядок и импорт» появился мой файл jar

Ответ №3:

Вы пытались поместить jar в библиотеки вместо lib?

http://android.foxykeep.com/dev/how-to-fix-the-classdefnotfounderror-with-adt-17