2014-09-19 63 views
1

我正在探索在android應用程序中使用mapsfoge/graphhopper的可能性,但無法使用graphhopper編譯測試。Android Studio中的Graphhopper 0.3未編譯:Dex異常

基於研究,我認爲問題在於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的機器人,這是經mapsforge,機器人依賴。奇怪的是,如果我只是使用mapsforge-map-android,那麼該應用程序符合並運行良好。我也嘗試從gradle.build文件中刪除mapsforge-map-android行,因爲mapsforge是通過graphhopper引入的,但仍然沒有運氣。

任何幫助解決此問題將不勝感激!

+0

您不應該依賴graphhopper-android,只需要graphhopper。並可能排除一些日誌記錄和OSM的東西,就像我們爲我們的Android應用程序:https://github.com/graphhopper/graphhopper/blob/master/android/pom.xml#L37 – Karussell 2014-09-25 12:59:43

+0

謝謝。我最終通過從github下載最近的源代碼,打包jar包,然後將它們放在我的libs目錄中以包含在項目中來修復它。 – SjB 2014-09-29 15:39:56

回答

2

如何,我固定的問題的更新:

我無法追查究竟發生了什麼事,所以採取簡單地是什麼了以下內容:在我的工作(儘管確實注意到這是根據github文檔推薦的做事方式)。

我結束了從github抓取最新的代碼,將其編譯成jar(通過shell腳本)。這會創建一個graphhopper-0.4-SHAPSHOT-android.jar和slf4j-android-1.6.1-RC1.jar,並將它們放在我的項目的libs目錄中。

注意:我認爲問題可能是有更新合併到Github上的當前主分支,這些分支尚未推送到Maven Central。您不能使用graphhopper庫的.3版本,因爲這是中央存儲庫中唯一的版本,所以您無法像我嘗試的那樣將graphhopper添加到您的build.gradle中。

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