#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