Я работаю над интеграцией SDK поставщика «ThirdParty» в мое приложение Xamarin Forms «MyApp». Я наткнулся на что-то с привязкой jar / aar, для которого я решил взломать, но, похоже, должен быть лучший способ.
Предполагаемая структура кода Xamarin - 6 сборок следующим образом:
Код проекта - Описание
(1) MyApp - кросс-платформенный код ядра
Ссылка:
(4)
(2) MyApp.IOS - приложение для IOS
Список литературы:
(4)
(6)
(3) MyApp.Android - приложение для Android
Ссылка:
(4)
(5)
Здесь, я надеюсь, не нужно включать в этот проект высокого уровня:
- libThirdPartyClient.so как AndroidNativeLibrary и
- ThirdPartyclient.jar как AndroidJavaLibrary
(4) ThirdPartyConnector - кроссплатформенный подпроект ThirdParty
Ссылка:
Ничего от 1-6
Где я буду размещать общий код и абстракции вещей, расположенных в проектах (5) и (6), которые будут использоваться проектом (1).
(5) ThirdPartyConnector.Android - Связывающая сборка
Ссылка:
(4)
Содержит реализации абстракций из (4).
Здесь я ожидаю включить в этот проект:
- libThirdPartyClient.so как AndroidNativeLibrary и
- ThirdPartyclient.jar как AndroidJavaLibrary
(6) ThirdPartyConnector.IOS - узел переплета
Ссылка:
(4)
Содержит реализации абстракций из (4).
Во время выполнения я сталкиваюсь с тем, что , если я не включаю файлы libThirdPartyClient.so и ThirdPartyclient.jar в сборку (3) MyApp.Android (я изначально включил их в (5) ThirdPartyConnector.Android ), файлы so и jar не включаются в окончательный файл APK . Во время выполнения приложение сталкивается с ошибками Java Class Not Found JNI , поскольку содержимое файлов so и jar отсутствует / не включено во встроенный файл APK.
Что мне действительно не нравится в этом, так это то, что ни один код в ассемблере (3) не имеет прямых вызовов в эти подчиненные java-артефакты, которые необходимы на гораздо более низком уровне (5) в решении во время выполнения. Мой проект (3) сам по себе достаточно большой, поэтому у меня есть мотивация разбить вещи на логические подпроекты.
Вопросы:
Есть ли у кого-нибудь какие-либо предложения о том, как эти сборки лучше связать / внедрить нативные элементы, когда у вас есть отдельные проекты, такие как (3) и (5)?
Если бы у кого-то было, например, еще 4 банки от других поставщиков / пакетов, было бы
нужно также включить все эти файлы jar и aar в мою сборку
(3) проект? Кажется грязным, но выполнимым, если действительно нужно.
Этот пост был ориентирован на Android, но вы должны сделать подобное
вещи для IOS, когда дело доходит до встраивания нативный код? Буду ли я иметь
встроить код, используемый проектом (6) в проект (2)?
Будем весьма благодарны за любые советы, указания или понимание того, как это работает во время компиляции.