Я пытался использовать библиотеку карт Java mapsforge-vtm для отображения автономной карты с использованием файла mapsforge с Xamarin Android.
В Visual Studio 2019 я создал один aar binding проект как «LibraryProjectZip» для файла «vtm- android -0.13.0.aar» и один jar binding project as » EmbeddedJar "для файла " vtm- android -0.13.0.jar ".
Также существует зависимость от " vtm-0.13.0.jar ", который вы можете увидеть в файле "vtm- android -0.13.0.pom" .
Этот файл "vtm-0.13.0.jar", кажется, вызывает проблемы (например, java интерфейс Gesture, который я включил ниже).
Если вы продолжаете следовать зависимостям (просматривая файлы pom), есть также зависимости для "slf4j-api -1.7.28.jar " и " androidsvg-1.4.jar " но, насколько я могу судить, эти две банки не вызывают проблем.
Относительно У меня есть проблемный файл "vtm-0.13.0.jar" пытался использовать его как «EmbeddedReferenceJar» в обоих вышеупомянутых проектах (то есть, проекты aar binding и jar binding для vtm- android). Оба эти двух связывающих проекта могут быть построены без ошибок (при использовании «androidsvg-1.4.jar» и «slf4j-api-1.7.28.jar» как «EmbeddedReferenceJar»)
Однако при попытке ссылаться на эти проекты из приложения Xamarin Android, оно не работает.
При попытке сделать это я не могу ссылаться как на проекты aar binding, так и на jar binding, потому что тогда появляется сообщение об ошибке дублированные версии, например, класса "Org.Oscim. Android .MapView". Но когда я использую только один из них (т.е. проект aar или jar), тогда доступны только типы из основных библиотек (то есть файл "LibraryProjectZip" для "vtm- android -0.13.0.aar" и " EmbeddedJar "файл для" vtm- android -0.13.0.jar ").
Но я, похоже, НЕ могу ссылаться на любые типы из" EmbeddedReferenceJar ".
Например , в "vtm-0.13.0.jar" есть java тип "org.oscim.tiling.source.mapfile.MapFileTileSource", но он, кажется, не становится доступным, т.е. я НЕ могу использовать:
using Org.Oscim.Tiling.Source.Mapfile.MapFileTileSource;
Фактически, единственное пространство имен, которое я могу использовать, начиная с "Org.Oscim", это "Org.Oscim. Android", например, это работает:
using Org.Oscim.Android;
Затем я попытался создать отдельный "EmbeddedJar" из файла "vtm-0.13.0.jar", так как я надеялся, что на него потом можно будет ссылаться из Visual Studio. (и в этом проекте я добавил "slf4j-api-1.7.28.jar" как "EmbeddedReferenceJar")
Однако компиляция завершилась с 85 ошибками. И я попробовал все четыре комбинации настроек для «Android Class Parser» и «Android Codegen Target» (т.е. четыре комбинации «class-parse + XAJavaInterop1» и «jar2 xml + XAJavaInterop1» и «class»). -parse + Xamarin Android "и" jar2 xml + Xamarin Android ")
Я также пробовал с несколькими различными целевыми фреймворками (Android 4.4 и Android 9 и Android 10).
50 из этих 85 ошибок - это та же ошибка: Ошибка CS0234 Тип или имя пространства имен 'IGesture' не существует в пространстве имен 'Org.Oscim.Event' (вы пропустили сборку ссылка?) vtm-jar ... \ obj \ Debug \ generate \ src \ Org.Oscim.Event.IGesture.cs
Действительно, при поиске в этом файле "IGesture.cs" интерфейс не определен там. Я ожидал найти что-то вроде "publi c частичный интерфейс IGesture ..." в этом файле, аналогично тому, как есть "publi c частичный интерфейс IGestureListener ..." в файле "IGestureListener.cs "в том же каталоге.
Я подозреваю, что это как-то связано с тем, что java интерфейс" Жест "кажется немного необычным и поэтому не очень хорошо поддерживается Xamarin / Visual Studio.
Это то, о чем я говорю: вот «нормальный» тип интерфейса Java (GestureListener), который в Visual Studio работает без ошибок: https://github.com/mapsforge/vtm/blob/master/vtm/src/org/oscim/event/GestureListener.java
package org.oscim.event;
public interface GestureListener {
boolean onGesture(Gesture g, MotionEvent e);
}
Вот исходный код проблемного интерфейса c (Gesture) в "vtm-0.13.0.jar": https://github.com/mapsforge/vtm/blob/master/vtm/src/org/oscim/event/Gesture.java
package org.oscim.event;
public interface Gesture {
final class Press implements Gesture {
}
final class LongPress implements Gesture {
}
final class Tap implements Gesture {
}
final class DoubleTap implements Gesture {
}
final class TripleTap implements Gesture {
}
final class TwoFingerTap implements Gesture {
}
Gesture PRESS = new Press();
Gesture LONG_PRESS = new LongPress();
Gesture TAP = new Tap();
Gesture DOUBLE_TAP = new DoubleTap();
Gesture TRIPLE_TAP = new TripleTap();
Gesture TWO_FINGER_TAP = new TwoFingerTap();
}
Насколько Я помню, я не думаю, что когда-либо видел такой код Java с классами, которые определяются и создаются в интерфейсе. И я полагаю, что Xamarin / Visual Studio также трудно понять, такого рода код Java.
Итак, есть ли что-нибудь, что вы можете с этим сделать (и все другие ошибки сборки, всего 85, с это библиотека vtm)?
Кто-нибудь смог реализовать приложение Android с Xamarin Android, которое использует привязки mapsforge-vtm, включая также возможность собрать все части вместе и успешно отобразить карта из файла карты mapsforge?