Использование AIDL с Mono для Android

#ipc #xamarin.android

#ipc #xamarin.android

Вопрос:

Не будучи достаточно терпеливым для книги Mono для Android, я начал изучать конструкции программирования Android и переводить их в инфраструктуру Mono. Похоже, что большую часть времени хорошие люди в Xamarin и я думаем в том же духе, поэтому прогресс был относительно безболезненным, но в вопросе AIDL я застрял. Был ли реализован AIDL? Если да, то как я могу его использовать? Если нет, то каков рекомендуемый способ использования IPC?

Ответ №1:

Наконец-то поддерживаются AIDL. Чтобы использовать их, добавьте файлы aidl в свой проект и задайте для действия сборки значение AndroidInterfaceDefinition. Xamarin.Android будет генерировать cs-файлы, которые компилируются вместе с вашим исходным кодом, чтобы вы могли использовать интерфейсы aidl в своем коде на c #. VS2012 по-прежнему помечает их как неизвестные / ошибки в коде, но, в конце концов, код компилируется и работает.

Ответ №2:

К сожалению, AIDL в настоящее время не поддерживается. Он поддерживается только через поддержку взаимодействия Java; то есть вам нужно:

  1. Запишите свои .aidl файлы.
  2. Скомпилируйте .aidl файлы в .java файлы (возможно, как этап предварительной сборки?).
  3. Включите сгенерированные .java файлы в свою сборку, добавив их в проект и установив для их действия сборки значение AndroidJavaSource.

Конечно, для parcel s вам нужно будет реализовать them…in Java, и для сервисов вам также нужно будет написать некоторый Java-код.

Документация по встроенной поддержке взаимодействия Java также может быть полезна.

В целом, не очень элегантно. Не сложно, но и не элегантно.

Следовательно, рекомендуемый способ выполнения IPC — использовать Intents , BroadcastReceivers и ContentProviders (в зависимости от потребностей вашего IPC) и избегать использования участков; вместо этого используйте Strings и другие встроенные типы.

Комментарии:

1. Это больше не так, xamarin теперь поддерживает файлы aidl, см. Ответ @MichalDobrodenka