将 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。当&lt;uses-library&gt; 位于正确的位置时,将maps.jar 包含在您的项目中会引发IllegalAccessException,而当它位于错误的位置时会引发RuntimeException (stub)。 API 必须通过 Android API 目标加载。

【讨论】:

以上是关于将 MapView 添加到 Android 应用程序时,获取跨加载器异常的主要内容,如果未能解决你的问题,请参考以下文章

Android:在 MapView 上为 ItemizedOverlay 使用 9-patch 和文本

安卓; MapView,如何设置默认位置?

在 Android 中旋转 MapView

使用两个功能将注释添加到 mapView

将gradle中的外部jar添加到Android项目

mapView.onCreate 在 api 级别 26 的cordova android 应用程序中工作正常,但在 api 级别 28 时崩溃