Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Testing Android project with jar dependecies

My Android project has a few jar libraries as dependencies. Alone, it compiles and works well. I wrote a little test project but running it I don't get any result (no tests passed or failed) nor any error, but in the logcat's output there are warnings like this:

06-06 14:55:43.533: INFO/dalvikvm(7049): Failed resolving Lcom/adwhirl/adapters/InMobiAdapter; interface 315 'Lcom/inmobi/androidsdk/InMobiAdDelegate;'
06-06 14:55:43.533: WARN/dalvikvm(7049): Link of class 'Lcom/adwhirl/adapters/InMobiAdapter;' failed
06-06 14:55:43.533: INFO/dalvikvm(7049): Failed resolving Lcom/adwhirl/adapters/InMobiAdapter; interface 407 'Lcom/inmobi/androidsdk/InMobiAdDelegate;'
06-06 14:55:43.533: WARN/dalvikvm(7049): Link of class 'Lcom/adwhirl/adapters/InMobiAdapter;' failed
06-06 14:55:43.553: DEBUG/dalvikvm(7049): GC_CONCURRENT freed 471K, 51% free 2880K/5831K, external 0K/0K, paused 2ms+4ms
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): Cannot load class. Make sure it is in your apk. Class name: 'com.adwhirl.adapters.InMobiAdapter'. Message: 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):     at java.lang.Class.classForName(Native Method)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at java.lang.Class.forName(Class.java:234)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.test.ClassPathPackageInfoSource.createPackageInfo(ClassPathPackageInfoSource.java:89)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.test.ClassPathPackageInfoSource.access$000(ClassPathPackageInfoSource.java:40)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:51)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.test.ClassPathPackageInfoSource$1.load(ClassPathPackageInfoSource.java:48)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.test.SimpleCache.get(SimpleCache.java:31)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.test.ClassPathPackageInfoSource.getPackageInfo(ClassPathPackageInfoSource.java:73)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.test.ClassPathPackageInfo.getSubpackages(ClassPathPackageInfo.java:48)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.test.ClassPathPackageInfo.addTopLevelClassesTo(ClassPathPackageInfo.java:61)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.test.ClassPathPackageInfo.getTopLevelClassesRecursive(ClassPathPackageInfo.java:55)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:154)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:115)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:103)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:360)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3398)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.app.ActivityThread.access$2200(ActivityThread.java:123)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:977)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.os.Looper.loop(Looper.java:130)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at android.app.ActivityThread.main(ActivityThread.java:3835)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at java.lang.reflect.Method.invokeNative(Native Method)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at java.lang.reflect.Method.invoke(Method.java:507)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at dalvik.system.NativeStart.main(Native Method)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): Caused by: java.lang.NoClassDefFoundError: com.adwhirl.adapters.InMobiAdapter
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     ... 26 more
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049): Caused by: java.lang.ClassNotFoundException: com.adwhirl.adapters.InMobiAdapter in loader 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):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
06-06 14:55:43.553: WARN/ClassPathPackageInfoSource(7049):     ... 26 more

As you can see seems that there are problem exporting the libraries, infact I get an error like that for every library. I read in this blog post that to get it to work, it should be enough to export all the libraries in the main project, but for me didn't works. Any other idea?

like image 831
rciovati Avatar asked Jun 06 '11 14:06

rciovati


People also ask

How do I use dependencies with my Android project?

The dependencies can be located on your machine or in a remote repository, and any transitive dependencies they declare are automatically included as well. This page describes how to use dependencies with your Android project, including details about behaviors and configurations that are specific to the Android plugin for Gradle.

Where do I run Android tests in Java?

Located at module-name /src/test/java/. These are tests that run on your machine's local Java Virtual Machine (JVM). Use these tests to minimize execution time when your tests have no Android framework dependencies or when you can mock the Android framework dependencies.

How to create a test module in Android Studio?

To create a test module, proceed as follows: 1 Create a library module. 2 In the module level build file, apply the com.android.test plugin instead of com.android.library. 3 Sync your project. More ...

How do I test my Android app?

Test your app. Android Studio is designed to make testing simple. With just a few clicks, you can set up a JUnit test that runs on the local JVM or an instrumented test that runs on a device.


3 Answers

Go to your project that uses .jar files (i.e. project under test). Click right button -> Properties-> Java Build Path -> Order and Export -> check libraries there

enter image description here

like image 57
inazaruk Avatar answered Nov 10 '22 18:11

inazaruk


what worked for me was - in 'Order and Import' section bringing my jar file up

like image 38
tarun_tenniso Avatar answered Nov 10 '22 18:11

tarun_tenniso


Have you tried to put the jars in libs intead than lib ?

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

like image 27
Testo Testini Avatar answered Nov 10 '22 16:11

Testo Testini