开发者

ClassNotFound launchig maps activity declared in Android library

I am getting this exception when trying to start an activity (TestLocationActi开发者_如何学运维vity) 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)


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


Did you register TestLocationActivty in your manifest?


maybe this can help you.

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


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜