Библиотека C # .dll в приложении для Android - PullRequest
9 голосов
/ 06 декабря 2011

В настоящее время я использую Monodroid для разработки приложения для Android.Я довольно плохо знаком с приложениями для телефонов, поэтому запутался в нескольких вещах:

  1. Что по определению является библиотекой Android?Я использую шаблон Mono для создания библиотеки Android: создайте библиотеку классов Mono для Android => напишите код и встроите в .dll => запустите с эмулятором из Visual Studio, и он прекрасно работает в эмуляторе.Но является ли файл .dll библиотекой Android?Или он конвертируется в Mono перед началом работы на эмуляторе, а библиотека 'REAL' для Android должна быть JAR?

  2. Могу ли я напрямую использовать мой определенный .dll, написанный на C #, для создания этого приложения?Я попробовал это в Mono, напрямую ссылаясь на это в моем приложении для Android, и он строит, без ошибок.Но когда эмулятор запускает это приложение, оно застревает (все еще без ошибок) - как правильно использовать c # .dll в проекте приложения для Android?

Я понимаю, что есть довольнопара тем, обсуждающих связь между c # и android и о mono, но после прочтения я все еще не могу обойти эту проблему со ссылками на библиотеку, поэтому, если кто-то может предложить какой-либо намек / мысли, будет очень признателен

1 Ответ

3 голосов
/ 06 декабря 2011
  1. Сгенерированная DLL скомпилирована для профиля Mono для Android , который основан на Moonlight (реализация Silverlight в Mono). Во время выполнения .NET-код запускается непосредственно для среды выполнения Mono, которая выполняется как часть вашего приложения . Когда код .NET подклассов чего-то со стороны Java (например, Java.Lang.Object), Mono для Android генерирует вызываемых оболочек для обработки связи между средами выполнения.
  2. Технически вы можете использовать обычную .NET DLL в приложении Mono для Android, но я бы не рекомендовал это делать. Профиль, предоставляемый Mono для Android, намного меньше, чем профиль полной платформы .NET (и даже не полностью эквивалентен Silverlight), поэтому, если ваша DLL ссылается на метод, который не найден в Mono для Android, ваш приложение вылетит. Вместо этого я бы порекомендовал создать отдельную библиотеку классов для вашего приложения и обмениваться исходными файлами между проектами, используя связывание файлов. Мой пост в блоге здесь содержит пример того, как это сделать.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...