Как создать привязку Xamarin для AAR со многими зависимостями?

Я пытаюсь создать библиотеку Xamarin Binding для Android com.adobe.creativesdk.image

Проблема в том, что эта библиотека содержит 20 ссылок, и эти ссылки, безусловно, содержат гораздо больше. Мне нужно было бы изучить все дерево и извлечь все ссылки, чтобы добавить их в проект привязки.

Конечно, должен быть более простой способ сделать это. Мне сказали, что я могу создать пакет AAR, который включает все ссылки с помощью Android Studio, но я не уверен в его действиях. Некоторые из ссылок также относятся к AAR.

Не могли бы вы поставить меня на правильный путь, чтобы заставить эту привязку работать?

Ответ 1

Связывающие библиотеки всегда имеют свои собственные Caveats, но я собираюсь сделать некоторые обобщения, чтобы помочь вам упорядочиться.

  1. Проверьте задействованные зависимости и, если какая-либо из них уже есть в Nuget, используйте их. Такие вещи, как библиотеки поддержки Android, API Google Play, IBM SDK и т.д. Большинство из них уже имеют привязки и находятся в Nuget.

  2. Не забудьте сравнить номера версий зависимостей с номерами в Nuget. Возможно, ваша .aar библиотека на самом деле более свежая, чем Binding on Nuget.

  3. Отдельные большие библиотеки. Найдите остальные зависимости, которых нет в Nuget, и которые относительно велики, а затем создайте отдельные проекты библиотек привязки Android для каждого из них. Обычно API-интерфейсы связывания распадаются с большими библиотеками в качестве зависимостей, поэтому гораздо проще (и более чистым IMO) создавать для них отдельные проекты, а затем добавлять ссылки на проекты в конечную библиотеку.

  4. Отделите свои jars от aars. Обычно ваши файлы .aar - это большие файлы, которые в любом случае получают свои собственные привязки и попадают в # 3, но зависимости jar должны использовать ReferenceJar Build Actions.

  5. Играйте со своим MetaData.xml. Это может занять много времени, но API Binding не идеальны. Используйте MetaData и другие файлы, чтобы очистить их по своему вкусу.

Некоторые другие вещи, которые могут помочь:

  • https://marketplace.visualstudio.com/items?itemName=EgorBogatov.XamarinGradleBindings (плагин VS для создания библиотек связывания из зависимостей gradle. Несовершенный, но отличный инструмент для начала работы. Не забудьте переместить ваши .jar и .aar файлы в папку Jars так как это по какой-то причине добавляет их в корневой каталог проекта)
  • https://developer.xamarin.com/guides/android/advanced_topics/binding-a-java-library/customizing-bindings/java-bindings-metadata/ (понимание некоторых хороших способов обновления файла MetaData.xml)
  • Я бы также посмотрел вокруг GitHub для некоторых существующих проектов Bindings для библиотек Android аналогичного размера, таких как сервисы AWS или другие библиотеки Apache.

Ответ 2

У меня была такая же проблема, и я, наконец, решил ее, просто добавив зависимости. Многие могут быть добавлены через пакеты NuGet (rightclick on bindingproject и щелкните add nuget packages...), самые общие из них, такие как игровые сервисы, gson okhttp3 и т.д., Можно найти здесь. Если у вас, как и я, были некоторые более необычные зависимости, вам может потребоваться добавить их в качестве самих связующих объектов.

Я прочитал, что вы можете напрямую добавить зависимость aar/jar к функции bindingproject и установить действие сборки для referenceJar или embeddedReferenceJar, но это не сработало для меня. Im относительно новичок в xamarin, поэтому я не уверен, что его просто не так, как его предполагалось использовать, или если это было потому, что они не могли автоматически быть связаны из-за ошибки выполнения (получили некоторые ошибки и предупреждения, которые мне нужно было исправить в метафайле, когда я позже добавил jar/aar зависимости в свой собственный проект bindings).

Независимо от того, как я получил его для работы, было добавлено новое приложение bindings для решения, в котором я добавил jar/aar зависимости, а затем создал его и добавил необходимые строки/узлы в метафайл, чтобы скомпилировать его. Затем я просто добавил проект привязки зависимостей в качестве ссылки в моем фактическом проекте bindings.

Это больше похоже на обходное решение, чем на реальное решение, но по крайней мере я получил его на работу, поэтому, надеюсь, он может вам помочь.

Ответ 3

Обращайтесь к любому, кому нужно создать оболочку вокруг jar-зависимости aar/jar, чтобы она хорошо работала с С#. Лучше всего ссылаться на зависимость aar через dll привязки, чем пытаться добавить ее в одну и ту же привязку, xamarin не может использовать более одного aar на привязку. Запишите обертку в свой собственный aar/binding и сделайте так, чтобы связывание /dll обертки ссылалось на зависимость также как связывание /dll. Кроме того - вы лучше используете файл aar, чем jar, в наши дни jar кажется устаревшим.