我正在探索在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引入的,但仍然没有运气。
任何帮助解决此问题的人都将不胜感激!
我也有同样的问题,多亏@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'
}
}
我玩了一会儿,结果是这样的。好的一面是你不必重新编译源代码:
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'
}
关于我如何解决问题的更新:
我无法准确地追踪到底发生了什么,所以请简单地看以下内容:我的工作环境(尽管请注意,根据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