Android Studio中的Graphhopper 0.3没有编译:Dex异常

时间:2014-09-19 18:03:57

标签: android dex graphhopper mapsforge

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

基于研究,我认为问题在于graphhopper和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)

我的应用程序builde.gradle:

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上,这是mapforge-android所依赖的。奇怪的是,如果我只使用mapsforge-map-android,该应用程序符合并运行良好。我也尝试从我的gradle.build文件中删除mapsforge-map-android行,因为mapsforge是通过graphhopper引入的,但仍然没有运气。

任何帮助解决这个问题都将非常感谢!

3 个答案:

答案 0 :(得分:2)

我如何解决问题的更新:

我无法准确追踪到底发生了什么,所以请按照以下内容进行操作:我的工作(尽管请注意这是根据github文档执行操作的推荐方法)。

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

注意:我认为问题可能是有更新合并到Github上的当前主分支,但尚未推送到Maven Central。你不能使用.ata的graphhopper库,因为这是中央存储库中唯一的版本,你不能像我一样在你的build.gradle中添加graphhopper。

答案 1 :(得分:1)

我玩了一下,这就是结果。好消息是你不必重新编译源代码:

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'
}

答案 2 :(得分:0)

我有同样的问题,感谢@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'
    }
}