views:

56

answers:

4

I am getting this exception when trying to start an activity (TestLocationActivity) that is derived from MapActivity, and which is declared inside an Android library project:

09-08 09:29:45.357: ERROR/AndroidRuntime(7502): java.lang.NoClassDefFoundError: msumo.business.testlocation.impl.view.TestLocationActivity
09-08 09:29:45.357: ERROR/AndroidRuntime(7502):     at msumo.app.test2.impl.Test2AppManagerImpl.loadNewScreen(Test2AppManagerImpl.java:94)
09-08 09:29:45.357: ERROR/AndroidRuntime(7502):     at msumo.business.common.GuiAppManager.handleMessage(GuiAppManager.java:101)
09-08 09:29:45.357: ERROR/AndroidRuntime(7502):     at msumo.core.MessageBus.dispatchMessage(MessageBus.java:338)
09-08 09:29:45.357: ERROR/AndroidRuntime(7502):     at msumo.core.MessageBus$1.doWork(MessageBus.java:251)
09-08 09:29:45.357: ERROR/AndroidRuntime(7502):     at msumo.core.util.WorkerThread.run(WorkerThread.java:29)

I can not find the source of the problem. I have included in both AndroidManifest.xml of main application and library project the Google Maps library declaration:

 <uses-library android:name="com.google.android.maps" />

In Eclipse I get no error and application launches normally, but when trying to start the indicated Activity it fails. The chunck of code that starts the activity is the following one:

    Intent intent = new Intent(ctx, TestLocationActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    ctx.startActivity(intent);

I have no clue about what can be wrong. Is it maybe impossible to use a Google APIs library from an Android Library project?

Update


I found some System traces that could help clear the situation:

09-08 10:53:34.615: INFO/dalvikvm(13221): Rejecting re-init on previously-failed class Lmsumo/platform/location/impl/LocationModuleImpl$2; v=0x0
09-08 10:53:34.654: WARN/System.err(13221): java.lang.NoClassDefFoundError: msumo.platform.location.impl.LocationModuleImpl$2
09-08 10:53:34.654: WARN/System.err(13221):     at msumo.platform.location.impl.LocationModuleImpl.doUseBestProvider(LocationModuleImpl.java:189)
09-08 10:53:34.654: WARN/System.err(13221):     at msumo.platform.location.LocationModule.performQuery(LocationModule.java:329)
09-08 10:53:34.662: WARN/System.err(13221):     at msumo.platform.location.LocationModule.handleMessage(LocationModule.java:543)
09-08 10:53:34.662: WARN/System.err(13221):     at msumo.core.MessageBus.dispatchMessage(MessageBus.java:338)
09-08 10:53:34.662: WARN/System.err(13221):     at msumo.core.MessageBus$1.doWork(MessageBus.java:251)
09-08 10:53:34.669: WARN/System.err(13221):     at msumo.core.util.WorkerThread.run(WorkerThread.java:29)
09-08 10:53:34.685: WARN/System.err(13221): java.lang.NoClassDefFoundError: msumo.platform.location.impl.LocationModuleImpl$2
09-08 10:53:34.685: WARN/System.err(13221):     at msumo.platform.location.impl.LocationModuleImpl.doUseBestProvider(LocationModuleImpl.java:189)
09-08 10:53:34.685: WARN/System.err(13221):     at msumo.platform.location.LocationModule.performQuery(LocationModule.java:329)
09-08 10:53:34.693: WARN/System.err(13221):     at msumo.platform.location.LocationModule.handleMessage(LocationModule.java:543)
09-08 10:53:34.693: WARN/System.err(13221):     at msumo.core.MessageBus.dispatchMessage(MessageBus.java:338)
09-08 10:53:34.693: WARN/System.err(13221):     at msumo.core.MessageBus$1.doWork(MessageBus.java:251)
09-08 10:53:34.693: WARN/System.err(13221):     at msumo.core.util.WorkerThread.run(WorkerThread.java:29)
A: 

Did you register TestLocationActivty in your manifest?

Falmarri
Of course, in both main application and library project (though in this last case it is unnecessary)
Fernando Miguélez
A: 

Hi,

maybe this can help you.

Did you register to obtain a Maps API Key? This may be the reason for your problem.

Michaël
Yes. I do have a Google Maps API Key (indeed two, one for debug compiling and another one for release builds) and it is included in the layout defined in library project.
Fernando Miguélez
A: 

Just a guess: have you chosen the right SDK for your project? You have the choice of every version twice. One with Google API and one without and to use maps, you should used the version with Google API.

WarrenFaith
I think so. I use SDK 2.1-update1 and Google APIs-7 r01. My phone is a Milestone updated to SDK 2.1.
Fernando Miguélez
I would recommend to make a minimalistic test project and see if it works with that...
WarrenFaith
+1  A: 

If you want to use the MapView provided by google you need to complete 3 steps:

  1. Obtain an Api Key for your debug and deploy certificate and use the right one inside your app
  2. Use an Emulator or Device that comes with the Google API. During creation of an AVD you can choose if the device should be with or without the Google Libraries.
  3. Register the usage of the Google Maps Library in your Manifest. This is done through adding:
    <uses-library android:name="com.google.android.maps" />
    to the application tag of your manifest. Be sure that the uses library is inside the application tag and not only in your manifest
Janusz
I followed all steps, as I indicated in my question
Fernando Miguélez
I found the error. You were right. My <uses-library> tag was OUTSIDE the <application> tag. Thanks for the tip.
Fernando Miguélez
No problems did the same error more then once. Hard to find because you are sure that everything is done already
Janusz