Graphhopper 0.3 в Android-студии не компилируется: Dex Exception

Я изучаю возможность использования mapsfoge/graphhopper в приложении для Android, но не могу получить тест для компиляции с 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)

Мое приложение buildde.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, на которую ссылается mapsforge-android. Странно то, что приложение соответствует и работает нормально, если я просто использую mapsforge-map-android. Я также попытался удалить строку mapsforge-map-android из моего файла gradle.build, так как mapsforge был загружен через graphhopper, но все равно не повезло.

Любая помощь в решении этой проблемы будет принята с благодарностью!

3 ответа

Решение

Обновление о том, как я исправил проблему:

Я не смог точно отследить, что происходило, поэтому просто примите следующее: моя работа (хотя учтите, что это рекомендуемый способ работы в соответствии с документацией github).

В итоге я взял последний код из github и скомпилировал его в jar (через скрипт оболочки). Это создает graphhopper-0.4-SHAPSHOT-android.jar и slf4j-android-1.6.1-RC1.jar, и я помещаю их в каталог libs моего проекта.

ПРИМЕЧАНИЕ. Я думаю, что проблема может заключаться в том, что есть обновления, объединенные в текущую главную ветку на Github, которые не были перенесены в Maven Central. Вы не можете использовать.3 библиотеки graphhopper, и так как это единственная версия в центральном хранилище, вы не можете просто добавить graphhopper в свой build.gradle, как я пытался.

Я немного поиграл с этим и вот результат. Хорошо, что вам не нужно перекомпилировать исходный код:

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

У меня была такая же проблема, и благодаря ответу @Blehi я ее исправил. Проблема была в основном в том, что Android Studio неправильно обрабатывает группы исключения. Итак, для версии 0.3 в Graphhopper это мои зависимости:

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'
    }
}
Другие вопросы по тегам