当前位置: 首页 > 知识库问答 >
问题:

Android studio中的Graphhopper 0.3未编译:Dex异常

耿志义
2023-03-14

我正在探索在android应用程序中使用mapsfoge/graphhopper的可能性,但无法使用graphhopper编译测试。

根据研究,我认为问题出在GrapHopper和mapsforge之间的依赖关系上。

例外情况如下:

Execution failed for task ':app:dexDebug'.
Error Code:
    2
Output:

UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexException: Multiple dex files define Lcom/applantation/android/svg/ParserHelper;
    at com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:594)
    at com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:552)
    at com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:533)
    at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:170)
    at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
    at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
    at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
    at com.android.dx.command.dexer.Main.run(Main.java:230)
    at com.android.dx.command.dexer.Main.main(Main.java:199)
    at com.android.dx.command.Main.main(Main.java:103)

我的应用程序正在构建。格拉德尔:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion "19.1.0"

    defaultConfig {
        applicationId "com.test.maptest"
        minSdkVersion 10
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:19.1.0'
    compile 'org.mapsforge:mapsforge-map-android:0.4.3'
    compile 'com.graphhopper:graphhopper-android:0.3'
}

看起来问题出在svg android上,mapsforge android依赖它。奇怪的是,如果我只使用mapsforge map android,该应用程序符合要求且运行良好。我还尝试从gradle中删除mapsforge地图android行。构建文件,因为mapsforge是通过graphhopper引入的,但仍然没有运气。

任何帮助解决此问题的人都将不胜感激!

共有3个答案

羊舌高峰
2023-03-14

我也有同样的问题,多亏@Blehi的回答,我解决了这个问题。问题主要在于Android Studio没有正确处理排除组。因此,对于graphhopper的0.3版,以下是我的依赖项:

dependencies {
    compile files('libs/mapsforge-core-0.4.3.jar')
    compile files('libs/mapsforge-map-0.4.3.jar')
    compile files('libs/mapsforge-map-android-0.4.3.jar')
    compile files('libs/mapsforge-map-reader-0.4.3.jar')
    compile files('libs/slf4j-android-1.6.1-RC1.jar')
    compile ('com.graphhopper:graphhopper:0.3') {
        exclude group: 'log4j', module: 'log4j'
        exclude group: 'org.slf4j', module: 'slf4j-log4j12'
        exclude group: 'org.slf4j', module: 'slf4j-api'
        exclude group: 'com.google.protobuf', module: 'protobuf-java'
        exclude group: 'org.openstreetmap.osmosis', module: 'osmosis-osm-binary'
        exclude group: 'org.apache.xmlgraphics', module: 'xmlgraphics-commons'
    }
}
帅雅逸
2023-03-14

我玩了一会儿,结果是这样的。好的一面是你不必重新编译源代码:

compile 'org.mapsforge:mapsforge-map-android:0.5.0-rc1'
compile ('com.graphhopper:graphhopper:0.3') {
    exclude group: 'log4j', module: 'log4j'
    exclude group: 'org.slf4j', module: 'slf4j-log4j12'
    exclude group: 'org.slf4j', module: 'slf4j-api'
    exclude group: 'com.google.protobuf', module: 'protobuf-java'
    exclude group: 'org.openstreetmap.osmosis', module: 'osmosis-osm-binary'
    exclude group: 'org.apache.xmlgraphics', module: 'xmlgraphics-commons'
}
马坚白
2023-03-14

关于我如何解决问题的更新:

我无法准确地追踪到底发生了什么,所以请简单地看以下内容:我的工作环境(尽管请注意,根据github文档,这是推荐的做事方式)。

我最终从github获取了最新的代码,并将其编译成JAR(通过shell脚本)。这将创建一个graphhopper-0.4-SHAPSHOT-android。jar和slf4j-android-1.6。1-RC1。jar,我把它们放在我项目的libs目录中。

注意:我认为问题可能在于Github上当前的主分支中合并了一些更新,但这些更新尚未发布到Maven Central。您不能使用graphhopper库的.3,因为这是中央存储库中的唯一版本,所以您不能只将graphhopper添加到构建中。当我尝试的时候。

 类似资料:
  • 问题内容: 这是我的应用程序级别gradle文件: 编译项目时出现的完整错误是: 错误:任务’:app:transformDexArchiveWithExternalLibsDexMergerForDebug’的执行失败。 java.lang.RuntimeException:com.android.builder.dexing.DexArchiveMergerException:无法合并dex

  • 根据developer.android.com的说法,为了支持多种语言,我们应该为每种语言创建唯一的xml文件。他们的例子:

  • 问题内容: 如何将Android DEX(VM字节码)文件反编译为相应的Java源代码? 问题答案: It’s easy 获取以下工具: 1)dex2jar将dex文件转换为jar文件 2)jd-gui查看jar中的java文件 由于dex2jar进行了一些优化,因此源代码具有很高的可读性。 Procedure:: 这是有关如何反编译的过程: 步骤1: 将中的转换为 注1:在Windows计算机上

  • 问题内容: 我的JDBC代码有问题。我正在尝试通过MySQL连接,但它给了我一个错误。如果您有时间,下面会给出我的错误日志。 我的代码如下。我正在使用驱动程序: 问题答案: 当您使用Eclipse作为IDE并尝试运行甚至无法编译的代码时,都会发生此错误。在Eclipse中检查“ 问题” 视图,并在执行应用程序之前修复编译错误。

  • 问题内容: 我的日历有问题。这是代码: 不能运行我的项目,因为在AndroidStudio显示错误,等…我得到nullPointException在模拟器运行时 它说 必须是以下之一:java.util.Calendar.DAY_OF_MONTHjava.util.Calendar.MONTH等… 我不明白此错误,因为它是其中之一 我有进口 对不起,我错过了它的初始化,但是还有另一个我想使用Cal