我正在探索在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引入的,但仍然没有运气。
任何帮助解决这个问题都将非常感谢!
答案 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'
}
}