将 MapView 添加到 Android 应用程序时,获取跨加载器异常
Posted
技术标签:
【中文标题】将 MapView 添加到 Android 应用程序时,获取跨加载器异常【英文标题】:When adding MapView to Android application, get cross-loader exception 【发布时间】:2010-12-27 09:05:51 【问题描述】:我在 android 中有一个项目,我想将 MapView 添加到其中。 我做了以下事情:
-
已下载 Google API 修订版 3。
将 maps.jar 库添加到我的项目中
将 MapView 添加到活动中
创建了新的虚拟设备,目标是 Google API(不是普通的目标 Android 1.5)
启动项目
当我尝试使用地图视图到达活动时,我得到
........
12-16 20:57:44.620: 错误/AndroidRuntime(792):由以下原因引起: java.lang.IllegalAccessError: 预验证的跨加载程序访问 类
12-16 20:57:44.620: 错误/AndroidRuntime(792):在 dalvik.system.DexFile.defineClass(本机 方法)
12-16 20:57:44.620: 错误/AndroidRuntime(792):在 dalvik.system.DexFile.loadClass(DexFile.java:193)
............
我做错了什么?
【问题讨论】:
【参考方案1】:如果使用 Eclipse,请确保您的项目构建路径中没有多次引用 maps.jar。这包括对 maps.jar 的任何直接引用,或通过 Google API 库(Google API [Android 1.5])的隐式引用。事实上,在您的项目构建路径中仅包含 Google API 库就足够了。
http://andmobidev.blogspot.com
【讨论】:
【参考方案2】:如果使用 Maven 的 Android 插件,请确保将测试项目对 Application-Under-Test 的 APK 的依赖声明在“已提供”范围内,例如 AUT 的 JAR:
<dependency>
<groupId>com.example</groupId>
<artifactId>my-application</artifactId>
<type>jar</type>
<version>1.0.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>my-application</artifactId>
<type>apk</type>
<version>1.0.0-SNAPSHOT</version>
<scope>provided</scope> <!-- ADD THIS -->
</dependency>
Maven 示例(在撰写本文时)都使测试 APK 依赖于具有默认(即“编译”)范围的应用程序 APK,导致应用程序提供“编译”范围的任何库都被打包到测试中APK 也是。
【讨论】:
【参考方案3】:我今天遇到了这个确切的问题。我的问题是我将 maps.jar 添加到我的项目中,而不是更改构建路径以包含Google APIs [android-2.1-update1]
而不是标准的android-2.1-update1
。当<uses-library>
位于正确的位置时,将maps.jar 包含在您的项目中会引发IllegalAccessException,而当它位于错误的位置时会引发RuntimeException (stub)
。 API 必须通过 Android API 目标加载。
【讨论】:
以上是关于将 MapView 添加到 Android 应用程序时,获取跨加载器异常的主要内容,如果未能解决你的问题,请参考以下文章
Android:在 MapView 上为 ItemizedOverlay 使用 9-patch 和文本
mapView.onCreate 在 api 级别 26 的cordova android 应用程序中工作正常,但在 api 级别 28 时崩溃