Xamarin конструктор формы не работает

Содержание
  1. Не работает «дизайнер»
  2. Устранение неполадок Xamarin.Forms
  3. Ошибка: «не удается найти версию, Xamarin.Forms совместимую с. «
  4. Из-за чего возникает эта ошибка?
  5. Исправление: удалите все пакеты и повторно добавьте Xamarin.Forms
  6. Предварительный просмотр форм Xamarin не отображается
  7. 7 ответов
  8. Советы по устранению неполадок
  9. Получение диагностических сведений
  10. Выходные данные диагностики MSBuild
  11. Журналы развертывания устройств
  12. Выходные данные журнала отладки Android
  13. Системные свойства Xamarin.Android
  14. Удаление bin и obj
  15. Xamarin.Android не может разрешить System.ValueTuple
  16. Сообщения сборки мусора
  17. Сообщения по глобальным ссылкам
  18. Экземпляр Java создается и упаковывается с помощью MCW
  19. Выполняется сборка мусора.
  20. Объект по-прежнему активен, так как handle! = null
  21. Слабая ссылка снова становится глобальной ссылкой
  22. Объект дезактивируется, так как handle == null
  23. Слабая ссылка удалена, новая глобальная ссылка не создается
  24. Программное выполнение запросов
  25. Журналы отладки Android
  26. Производительность операций с плавающей запятой очень низкая!
  27. Не удалось выполнить обнаружение пакета SDK для Android
  28. В интегрированной среде разработки не отображается целевое устройство
  29. Не удается запустить указанный исполняемый файл задачи keytool
  30. Файл monodroid.exe или aresgen.exe завершил работу с кодом 1
  31. На устройстве недостаточно дискового пространства для развертывания пакета
  32. INSTALL_FAILED_INVALID_APK при установке пакета
  33. INSTALL_FAILED_MISSING_SHARED_LIBRARY при установке пакета
  34. INSTALL_FAILED_UPDATE_INCOMPATIBLE при установке пакета
  35. INSTALL_FAILED_UID_CHANGED при установке пакета
  36. Не удается запустить приложения выпуска на устройстве
  37. Свойство OutPath не задано для проекта “MyApp.csproj”
  38. java.lang.ClassCastException: mono.android.runtime.JavaObject невозможно привести к.
  39. Неожиданные исключения NullReferenceException
  40. Прерывание из-за исчерпания глобальной ссылки
  41. Прерывание из-за несоответствия типов JNI
  42. Поддержка динамического кода
  43. Динамический код не компилируется
  44. В сборке выпуска исключение MissingMethodException возникает для динамического кода во время выполнения.
  45. Проекты, созданные с помощью AOT + LLVM, завершаются сбоем на устройствах x86

Не работает «дизайнер»

Xamarin — 16.7.000.440
Xamarin Designer — 16.7.0.495
Windows — 7

Читайте также:  Если видеоплеер не работает

Пробовал гуглить, но по факту ответов по этой теме два:
1. Все решилось переходом в debug режим;
2. Все само прошло после обновления.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Известны сорта роз, выращиваемых тремя цветоводами: «Анжелика», «Виктория», «Гагарин», «Ave Maria», «Катарина», «Юбилейн
Известны сорта роз, выращиваемых тремя цветоводами: «Анжелика», «Виктория», «Гагарин», «Ave.

Дан массив строк: «red», «green», «black», «white», «blue». Запишите в файл элементы массива построчно (в новой строке)
пишу так но не помогает: static void Main(string args) < string.

Почему не работает? Нужно чтобы генерировалось рандомно «Сок» или «Вино»
Random rand = new Random(); private void textBox1_TextChanged(object sender, EventArgs e) .

При создании проекта выбираю «Мобильное приложение Xamarin.Forms», в поддерживаемых платформах выбираю только Android.

При создании блокнота не работает кнопка «Копировать» или «Вставить»
Вот такой код, но наиболее интересны строки 74-84 т.к. они описывают кнопку копировать и кнопку.

Описать класс «поезд», содержащий поля «пункт назначения», «номер поезда», «время отправления»
Помогите пожалуйста с классом Описать класс «поезд», содержащий следующие закрытые поля.

Обработка «null» в MS Access «Приведение типа «|DBNull» к типу «String» является недопустимым»
Здравствуйте. Работаю с базой MS Access Вывожу в DataGridView таблицу Проблема следующая, если у.

Не работает кнопка «Добавить» после нажатия «Очистить»
На форме 4 picturebox и 2 кнопки. При запуске приложения picturebox не видны, при нажатии на кнопку.

Проблема при сравнении: «Оператор «>» не может применяться к операндам типа «Т» и «Т»»
Добрый день , пишу сортировку , все делаю на основе Т , но вот в чем проблемма public class.

Источник

Устранение неполадок Xamarin.Forms

Распространенные ошибки и способы их устранения

Ошибка: «не удается найти версию, Xamarin.Forms совместимую с. «

следующие ошибки могут появиться в окне консоли пакетов при обновлении всех NuGet пакетов в Xamarin.Forms решении или Xamarin.Forms проекте приложения Android:

Из-за чего возникает эта ошибка?

Visual Studio для Mac (или Visual Studio) могут указывать, что обновления доступны для Xamarin.Forms NuGet пакета и всех его зависимостей. В Xamarin Studio узел пакетов решения может выглядеть следующим образом (номера версий могут отличаться):

Эта ошибка может возникать при попытке обновить все пакеты.

Это связано с тем, что в проектах Android, для которых задана Целевая или компилируемая версия Android 6,0 (API 23) или ниже, Xamarin.Forms имеет жесткую зависимость от конкретных версий пакетов поддержки Android. Хотя обновленные версии этих пакетов могут быть доступны, Xamarin.Forms они не обязательно совместимы с ними.

В этом случае следует обновить только пакет, Xamarin.Forms так как они гарантируют, что зависимости останутся в совместимых версиях. Другие пакеты, добавленные в проект, также могут обновляться по отдельности, если они не приводят к обновлению пакетов поддержки Android.

Если вы используете Xamarin.Forms 2.3.4 или более позднюю версию, а Целевая версия проекта android — Android 7,0 (API 24) или более поздней версии, то эти неприменимые жесткие зависимости не применяются, и вы можете обновлять пакеты поддержки независимо от Xamarin.Forms пакета.

Исправление: удалите все пакеты и повторно добавьте Xamarin.Forms

Если пакеты Xamarin. Android. support были обновлены до несовместимых версий, проще всего исправить следующее:

  1. вручную удалите все пакеты NuGet в проекте Android, а затем
  2. Повторно добавьте Xamarin.Forms пакет.

При этом будут автоматически скачаны правильные версии других пакетов.

Чтобы просмотреть видео об этом процессе, ознакомьтесь с этой записью на форумах.

Источник

Предварительный просмотр форм Xamarin не отображается

Я использую Xamarin forms v2. 3.2.127 стабильный в Visual Studio 2015 в сообществе издания в операционной системе Windows 10. Каждый раз, когда я пытаюсь открыть xaml, предварительный просмотр Xamarin Forms ничего не показывает, просто синее поле, как на скриншоте ниже. Я также попытался создать новый проект даже в последнем канале предварительного выпуска, но он все тот же.

7 ответов

Как @jgoldberger сказал, XAML-код предпросмотра еще в начале развития. Однако, если вы находитесь на стабильном канале обновления Xamarin, возможно, стоит переключиться на канал бета-обновления.

были значительные улучшения в XAML previewer в следующем выпуске, который в настоящее время находится на 6-й RC-итерации (т. е. очень близко к конюшне). Таким образом, вы можете по крайней мере увидеть, исправляют ли улучшения предварительного просмотра вашу проблему. Вы всегда можете вернуться в канал стабильного обновления, если выбирать.

предварительный просмотр форм XAML по-прежнему выполняется и выпускается как предварительный выпуск. Вот это список текущих отчетов об ошибках, включая тот, который я только что подал, пытаясь проверить это сам.

многие из них являются частными внутренними ошибками, но на моем конце iOS отлично работала для простого решения XAML для шаблонов, просто Android не будет отображаться, но я получил баннер с ошибкой вверху, как описано в bug #44603

вот несколько шагов по устранению неполадок:

  • проект должен быть построен (скомпилирован) перед попыткой предварительного просмотра файлов XAML
  • агент конструктора должен быть настроен при первом предварительном просмотре файла XAML-индикатор выполнения будет отображаться в предварительном просмотре вместе с сообщениями о ходе выполнения, пока это не будет готово.

попробуйте закрыть и повторно открыть файл XAML.

недопустимый XAML: проект Android должен быть построен раньше предварительный просмотр может быть создан. Предварительный просмотр требует, чтобы проект был построен перед отображением страницы. Если в верхней части панели предварительного просмотра появится ошибка, выполните повторную сборку приложения и повторите попытку.

в Xamarin имеет некоторые дополнительная документация на их веб-сайте для устранения неполадок Xamarin.Forms Previewer

убедитесь, что вы установите Xamarin.Формирует пакет NuGet >= v2.3 для ваших проектов Android iOS и PCL.

когда вы XFPageRendererView содержание вашего просмотра, попробуйте установить последний Java Development Kit (64-разрядная версия будет в порядке, даже если Visual Studio работает на 32bit). Затем перейдите к:Visual Studio > Инструменты > Параметры > Xamarin > настройки Android > изменить расположение Java Development Kit на недавно установленный один.

в последнем обновлении Xamarin он исправлен автоматически. Убедитесь, что установлена 64-разрядная версия Java SDK. А также нужно построить / перестроить проект перед открытием файла XAML. Для деталей, вы можете проверить my пост здесь. Спасибо.

Если вы загружаете последнюю версию Java SDK, в это время это 9.x, а затем Xamarin Forms не поддерживает эту версию.

мы пошли в Xamarin Forms Live. Это сработало из коробки.

Как и многие другие ответы, Xamarin Forms находится в предварительном просмотре прямо сейчас.

в качестве альтернативы я использую LiveXAML. Это не предварительный просмотр формы, но использует другой, во многих случаях улучшенный подход. Инструмент позволяет вносить изменения в файлы XAML во время работы приложения, и вы видите изменения, почти сразу отраженные в приложении. Итак, то, что вы видите, — это не предварительный просмотр, а представление о реальной вещи.

Это позволяет вам взаимодействовать с вы приложение, как вы обычно бы и внести изменения на лету.

Это легко настроить, и есть бесплатная пробная версия.

  • не связан с LiveXAML, просто счастливый клиент.

Источник

Советы по устранению неполадок

Получение диагностических сведений

В Xamarin.Android есть несколько областей, которые следует рассмотреть при отслеживании различных ошибок. Сюда входит следующее.

  1. Выходные данные диагностики MSBuild.
  2. Журналы развертывания устройств.
  3. Выходные данные журнала отладки Android.

Выходные данные диагностики MSBuild

Диагностика MSBuild может содержать дополнительные сведения, относящиеся к сборке пакетов, а также некоторые сведения о развертывании пакета.

Чтобы включить вывод диагностики MSBuild в Visual Studio, выполните следующие действия:

  1. Щелкните Инструменты > Параметры. .
  2. В представлении дерева слева выберите Проекты и решения > Сборка и запуск.
  3. На панели справа в раскрывающемся списке детализации выходных данных сборки MSBuild выберите вариант «Диагностика».
  4. Нажмите кнопку ОК.
  5. Выполните очистку и перестройку пакета.
  6. Выходные данные диагностики появятся в области вывода.

Чтобы включить выходные данные диагностики MSBuild в Visual Studio для Mac/OS X, выполните следующие действия.

  1. Щелкните Visual Studio для Mac > Параметры. .
  2. В представлении дерева слева выберите Проекты > Сборка.
  3. На панели справа откройте раскрывающийся список детализации журнала и выберите вариант «Диагностика».
  4. Нажмите кнопку ОК.
  5. Перезапустите Visual Studio для Mac.
  6. Выполните очистку и перестройку пакета.
  7. Просмотрите выходные данные диагностики на панели ошибок (Представление > Панели > Ошибки), нажав кнопку «Выходные данные сборки».

Журналы развертывания устройств

Чтобы включить ведение журнала развертывания устройств в Visual Studio, выполните следующие действия.

  1. Сервис > Параметры… >
  2. В представлении дерева слева выберите Xamarin > Параметры Android.
  3. На панели справа поставьте флажок [X] ведение журнала отладки расширения (записывает monodroid.log на рабочий стол) .
  4. Сообщения журнала записываются в файл monodroid.log на рабочем столе.

Visual Studio для Mac всегда записывает журналы развертывания устройств. Найти их немного сложнее — файл журнала AndroidUtils создается на каждый день с указанием времени, когда происходит развертывание, например: AndroidTools-2012-10-24_12-35-45.log.

  • В Windows файлы журнала записываются в %LOCALAPPDATA%\XamarinStudio-\Logs .
  • В OS X файлы журнала записываются в $HOME/Library/Logs/XamarinStudio- .

Выходные данные журнала отладки Android

Android записывает много сообщений в журнал отладки Android. Xamarin.Android использует свойства системы Android для управления созданием дополнительных сообщений в журнале отладки Android. Свойства системы Android можно задать с помощью команды setprop в Android Debug Bridge (adb):

Свойства системы считываются во время запуска процесса и поэтому должны быть установлены перед запуском приложения, или приложение должно быть перезапущено после изменения системных свойств.

Системные свойства Xamarin.Android

Xamarin.Android поддерживает следующие системные свойства.

debug.mono.debug. Если не пустая строка, эквивалентно *mono-debug* .

debug.mono.env. Разделенный вертикальной чертой список переменных среды ( | ), которые необходимо экспортировать во время запуска приложения перед инициализацией Mono. Это позволяет задать переменные среды, управляющие ведением журнала Mono.

Так как значение имеет разделитель | , у него должен быть дополнительный уровень кавычек, поскольку команда `adb shell` удаляет набор кавычек.

Длина значений системных свойств Android не может превышать 92 символа.

debug.mono.log. Список компонентов, разделенных запятыми (» , «), которые должны заносить дополнительные сообщения в журнал отладки Android. По умолчанию не задано ничего. Возможные компоненты:

  • all: занесение всех сообщений.
  • gc: занесение сообщений о сборке мусора.
  • gref: занесение сообщений о распределении и освобождении (слабых, глобальных) ссылок.
  • lref. занесение сообщений о распределении и освобождении локальных ссылок.

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

debug.mono.trace. Позволяет задать параметр mono —trace =PROPERTY_VALUE .

Удаление bin и obj

В Xamarin.Android раньше возникала подобная проблема:

  • Возникает странная ошибка сборки или времени выполнения.
  • Вы выполняете операции Clean , Rebuild или вручную удаляете каталоги bin и obj .
  • Проблема исчезает.

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

Если у вас возникает следующая проблема:

  1. Обратите на нее внимание. Какое действие было выполнено последним и вызвало это состояние проекта?
  2. Сохраните текущий журнал сборки. Попробуйте выполнить сборку еще раз и запишите диагностический журнал сборки.
  3. Отправьте отчет об ошибке.

Прежде чем удалять каталоги bin и obj , заархивируйте их и сохраните для последующей диагностики при необходимости. Возможно, достаточно просто выполнить операцию Clean для проекта приложения Xamarin.Android, чтобы все снова заработало.

Xamarin.Android не может разрешить System.ValueTuple

Эта ошибка возникает из-за несовместимости с Visual Studio.

Обновление 1 для Visual Studio 2017 (версия 15.1 или более ранняя) совместимо только с пакетом NuGet System.ValueTuple 4.3.0 (или более ранней версии).

Обновление 2 для Visual Studio 2017 (версия 15.2 или более поздняя) совместимо только с пакетом NuGet System.ValueTuple 4.3.1 (или более поздней версии).

Выберите правильный пакет NuGet System.ValueTuple, соответствующий установке Visual Studio 2017.

Сообщения сборки мусора

Сообщения компонента сборки мусора можно просмотреть, задав для системного свойства debug.mono.log значение, содержащее gc.

Сообщения сборки мусора создаются каждый раз, когда выполняется сборка мусора, и предоставляют сведения о том, сколько работы выполнено в ходе сборки мусора:

Дополнительные сведения о сборке мусора, например о времени, можно создать, задав для переменной среды MONO_LOG_LEVEL значение debug :

Это приведет к появлению (множества) дополнительных сообщений Mono, включая следующие три последствия.

В сообщении GC_BRIDGE num-objects — количество объектов моста, рассматриваемых в ходе этого прохода, а num_hash_entries — количество объектов, обработанных в ходе этого вызова кода моста.

В сообщениях GC_MINOR и GC_MAJOR total — время приостановки (потоки не выполняются), а bridge — время, затрачиваемое на код обработки моста (который работает с виртуальной машиной Java). Во время обработки моста среда не приостанавливается.

В целом чем больше значение num_hash_entries , тем больше времени займут сборки bridge и тем больше будет время total , потраченное на сбор.

Сообщения по глобальным ссылкам

Чтобы включить ведение журнала глобальных ссылок, системное свойство debug.mono.log должно содержать gref, например:

Xamarin.Android использует глобальные ссылки Android для предоставления сопоставлений между экземплярами Java и связанными управляемыми экземплярами, так как при вызове метода Java необходимо предоставить экземпляр Java.

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

Количество глобальных ссылок считается внутри Xamarin.Android и не может содержать глобальные ссылки, извлеченные другими собственными библиотеками, загруженными в процесс. Используйте количество глобальных ссылок для расчета.

Существует четыре сообщения о последствиях.

  • Создание глобальной ссылки: это строки, которые начинаются с +g+ и предоставляют трассировку стека для создания пути кода.
  • Уничтожение глобальной ссылки: это строки, которые начинаются с -g- и могут предоставлять трассировку стека для удаления пути кода глобальной ссылки. Если сборщик мусора удаляет глобальную ссылку, трассировка стека не предоставляется.
  • Создание слабой глобальной ссылки: это строки, начинающиеся с +w+ .
  • Уничтожение слабой глобальной ссылки: это строки, начинающиеся с -w- .

Во всех сообщениях значение grefc — это число глобальных ссылок, созданных Xamarin.Android, а значение grefwc — это число слабых глобальных ссылок, созданных Xamarin.Android. Значение handle или obj-handle является значением обработчика JNI, а символ после » / » является типом значения обработчика: /L для локальной ссылки, /G для глобальных ссылок и /W для слабых глобальных ссылок.

В рамках процесса сборки мусора глобальные ссылки (+g+) преобразуются в слабые глобальные ссылки (+w+ и -g-), выполняется сборка мусора на стороне Java, а затем проверяется наличие слабой глобальной ссылки, чтобы определить, была ли она собрана. Если она все еще активна, то для слабой ссылки создается новая глобальная ссылка (+g+, -w-), в противном случае слабая ссылка уничтожается (-w).

Экземпляр Java создается и упаковывается с помощью MCW

Выполняется сборка мусора.

Объект по-прежнему активен, так как handle! = null

Слабая ссылка снова становится глобальной ссылкой

Объект дезактивируется, так как handle == null

Слабая ссылка удалена, новая глобальная ссылка не создается

Здесь есть один интересный момент: на целевых объектах под управлением Android до версии 4.0 значение глобальной ссылки равно адресу объекта Java в памяти среды выполнения Android. (Т. е. сборщик мусора является неподвижным консервативным сборщиком и передает прямые ссылки на эти объекты.) Таким образом, после последовательности +g+, +w+, -g-, +g+, -w- получившаяся глобальная ссылка будет иметь то же значение, что и исходная. Это упрощает обработку журналов.

Но в Android 4.0 есть перемещаемый сборщик, который больше не передает прямые ссылки на объекты виртуальных машин среды выполнения Android. Поэтому после последовательности +g+, +w+, -g-, +g+, -w- значение глобальной ссылки будет другим. Если объект остается активным после нескольких сборок мусора, у него образуется несколько значений глобальной ссылки, что усложняет определение места, из которого фактически был выделен экземпляр.

Программное выполнение запросов

Вы можете узнать количество глобальных и слабых ссылок, выполнив запрос к объекту JniRuntime .

Java.Interop.JniRuntime.CurrentRuntime.GlobalReferenceCount — количество глобальных ссылок

Java.Interop.JniRuntime.CurrentRuntime.WeakGlobalReferenceCount — количество слабых ссылок

Журналы отладки Android

Журналы отладки Android могут предоставить дополнительный контекст для любых ошибок во время выполнения.

Производительность операций с плавающей запятой очень низкая!

Или: «Мое приложение работает 10 раз быстрее с отладочной сборкой, чем со сборкой выпуска!»

Xamarin.Android поддерживает несколько ABI устройств: armeabi, armeabi-v7a и x86. ABI устройств можно указать в разделе Свойства проекта > вкладка «Приложение» > Поддерживаемые архитектуры.

В отладочных сборках используется пакет Android, который предоставляет все ABI, поэтому для целевого устройства будет использоваться самый быстрый ABI.

Сборки выпуска будут включать только ABI, выбранные на вкладке «Свойства проекта». Можно выбрать несколько ABI.

armeabi является интерфейсом ABI по умолчанию и обладает самыми широкими возможностями поддержки устройств. Однако armeabi не поддерживает многопроцессорные устройства и аппаратные операции с плавающей запятой, а также другие возможности. Следовательно, приложения, использующие среду выполнения armeabi, будут привязаны к одному ядру и будут использовать реализацию soft-float. Оба ограничения могут значительно снизить производительность приложения.

Если приложению требуется высокая производительность для операций с плавающей запятой (например, игры), следует включить ABI armeabi-v7a. Вы можете выбрать поддержку только среды выполнения armeabi-v7a, хотя это означает, что старые устройства, которые поддерживают только armeabi, не смогут запустить приложение.

Не удалось выполнить обнаружение пакета SDK для Android

Для пакета SDK для Android в Windows Google предоставляет 2 загрузки. При выборе установщика exe будут записаны разделы реестра, указывающие Xamarin.Android на место установки. Если вы выберете ZIP-файл и распакуете его самостоятельно, Xamarin.Android не узнает, где искать пакет SDK. Вы можете сообщить Xamarin.Android, где находится пакет SDK, в Visual Studio, в разделе Средства > Параметры > Xamarin > Параметры Android:

В интегрированной среде разработки не отображается целевое устройство

Иногда вы пытаетесь развернуть приложение на устройстве, но устройство, которое вы хотите развернуть, не отображается в диалоговом окне «Выбор устройства». Это может произойти, если Android Debug Bridge неактивен.

Чтобы диагностировать эту проблему, найдите программу adb, а затем выполните следующую команду:

Если устройство отсутствует, необходимо перезапустить сервер Android Debug Bridge, чтобы можно было найти его:

Программное обеспечение HTC Sync может препятствовать правильной работе adb start-server. Если команда adb start-server не выводит порт для запуска, выйдите из программы HTC Sync и попробуйте перезапустить сервер adb.

Не удается запустить указанный исполняемый файл задачи keytool

Это означает, что путь не содержит каталог, в котором находится каталог bin пакета SDK для Java. Проверьте, выполнены ли эти действия из руководства по установке.

Файл monodroid.exe или aresgen.exe завершил работу с кодом 1

Чтобы решить эту проблему, перейдите в Visual Studio и измените уровень детализации MSBuild. Для этого выберите: Сервис > Параметры > Проект и Решения > Сборка, Запуск > Уровень детализации выходных данных о сборке проекта MSBuild и присвойте этому параметру значение Обычный.

Выполните сборку повторно и проверьте область вывода Visual Studio, которая должна содержать полную ошибку.

На устройстве недостаточно дискового пространства для развертывания пакета

Это происходит, когда вы не запускаете эмулятор из среды Visual Studio. При запуске эмулятора вне среды Visual Studio необходимо передать параметры -partition-size 512 , например

Убедитесь, что используете правильное имя симулятора, т. е. имя, которое использовалось при настройке симулятора.

INSTALL_FAILED_INVALID_APK при установке пакета

Имена пакетов Android должны содержать точку (» . «). Измените имя пакета, чтобы оно содержало точку.

  • В среде Visual Studio
    • Щелкните правой кнопкой мыши проект и выберите «Свойства».
    • Перейдите на вкладку «Манифест Android» слева.
    • Измените значение в поле «Имя пакета».
      • Если отображается сообщение: “Не найден файл AndroidManifest.xml. Щелкните, чтобы добавить его.”, — щелкните ссылку, а затем измените имя пакета.
  • В Visual Studio для Mac:
    • Щелкните правой кнопкой мыши проект и выберите «Параметры».
    • Перейдите к разделу «Сборка/Приложение Android».
    • Измените значение в поле «Имя пакета», чтобы оно содержало «.».

INSTALL_FAILED_MISSING_SHARED_LIBRARY при установке пакета

«Общая библиотека» в этом контексте не является файлом собственной общей библиотеки (libfoo.so). Это библиотека, которая должна быть отдельно установлена на целевом устройстве, например в Google Maps.

Пакет Android определяет, какие общие библиотеки требуются для элемента . Если на целевом устройстве отсутствует необходимая библиотека (например, //uses-library/@android:required имеет значение true, что является значением по умолчанию), установка пакета завершится сбоем с ошибкой INSTALL_FAILED_MISSING_SHARED_LIBRARY.

Чтобы определить, какие общие библиотеки требуются, просмотрите созданный файл AndroidManifest.xml (например, obj\Debug\android\AndroidManifest.xml) и найдите элементы . Элементы можно добавлять вручную в файл Properties\AndroidManifest.xml и через настраиваемый атрибут UsesLibraryAttribute.

Например, при добавлении ссылки на сборку в Mono.Android.GoogleMaps.dll будет неявно добавляться для общей библиотеки Google Maps.

INSTALL_FAILED_UPDATE_INCOMPATIBLE при установке пакета

У пакетов Android есть три требования.

  • Они должны содержать «.» (см. предыдущий пункт).
  • Они должны иметь уникальное имя строки пакета (поэтому в именах приложений Android, например com.android.chrome для приложения Chrome, рассматривается соглашение об обратных доменах).
  • При обновлении пакетов пакет должен иметь один и тот же ключ подписывания.

Представьте себе следующий сценарий.

  1. Вы создаете и развертываете приложение для отладки.
  2. Вы изменяете ключ подписывания, например для использования в качестве приложения выпуска (или если вы не хотите использовать ключ подписывания по умолчанию).
  3. Вы устанавливаете приложение, не удалив его сначала, например: Отладка > Запуск без отладки в Visual Studio.

В этом случае установка пакета завершится ошибкой INSTALL_FAILED_UPDATE_INCOMPATIBLE, так как имя пакета не изменилось во время выполнения ключа подписывания. Журнал отладки Android также будет содержать примерно следующее сообщение:

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

INSTALL_FAILED_UID_CHANGED при установке пакета

При установке пакета Android ему назначается идентификатор пользователя (UID). Иногда по неизвестным причинам при установке поверх уже установленного приложения происходит сбой установки с ошибкой INSTALL_FAILED_UID_CHANGED :

Чтобы обойти эту ошибку, полностью удалите пакет Android, установив приложение из графического пользовательского интерфейса целевого устройства Android или используя adb :

НЕ ИСПОЛЬЗУЙТЕ adb uninstall -k , так как это сохранит данные приложения и, таким образом, конфликтующий UID останется на целевом устройстве.

Не удается запустить приложения выпуска на устройстве

В выходных данных журнала отладки Android может содержаться примерно следующее сообщение:

У этого есть две возможные причины:

APK не предоставляет ABI, поддерживаемый целевым устройством. Например, APK содержит только двоичные файлы armeabi-v7a, а целевое устройство поддерживает только armeabi.

Ошибка Android. В этом случае удалите приложение, скрестите пальцы и переустановите приложение.

Чтобы исправить (1), измените параметры/свойства проекта и добавьте поддержку требуемого интерфейса ABI в список поддерживаемых ABI. Чтобы определить, какой ABI необходимо добавить, выполните следующую команду ADB на целевом устройстве:

Выходные данные будут содержать основной (и необязательный дополнительный) ABI.

Свойство OutPath не задано для проекта “MyApp.csproj”

Обычно это означает, что у вас есть компьютер HP, а для переменной среды “Platform” было установлено MCD или HPD. Это противоречит свойству платформы MSBuild, которое обычно имеет значение “Любой ЦП” или “x86”. Необходимо удалить эту переменную среды с компьютера, чтобы MSBuild мог работать:

  • Панель управления > Система > Дополнительно > Переменные среды

Перезапустите Visual Studio или Visual Studio для Mac и попытайтесь выполнить перестроение. Теперь все должно работать правильно.

java.lang.ClassCastException: mono.android.runtime.JavaObject невозможно привести к.

Xamarin.Android 4.x неправильно маршалирует вложенные универсальные типы. Например, рассмотрим следующий код C#, который использует SimpleExpandableListAdapter:

Проблема заключается в том, что Xamarin.Android неправильно маршалирует вложенные универсальные типы. List > маршалируется в java.lang.ArrrayList, но ArrayList содержит экземпляры mono.android.runtime.JavaObject (которые ссылаются на экземпляры Dictionary ) вместо элемента, который реализует java.util.Map, что приводит к следующему исключению:

Чтобы устранить эту проблему, используйте предоставленные типы коллекций Java, а не типы System.Collections.Generic для “внутренних” типов. Это приведет к появлению соответствующих типов Java при маршалинге экземпляров. (Следующий код является более сложным, чем требуется для сокращения времени жизни глобальной ссылки. Его можно упростить путем изменения исходного кода с помощью s/List/JavaList/g и s/Dictionary/JavaDictionary/g , если время существования глобальной ссылки не имеет значения.)

Неожиданные исключения NullReferenceException

Иногда в журнале отладки Android упоминаются NullReferenceException, которые “не могут произойти” или поступают из Mono для кода среды выполнения Android незадолго перед отключением приложения:

Это может произойти, когда среда выполнения Android решает прервать процесс по ряду причин, включая ограничение глобальной ссылки целевого объекта или “проблемы” с JNI.

Чтобы узнать, в этом ли причина, проверьте в журнале отладки Android сообщение от процесса, аналогичное следующему:

Прерывание из-за исчерпания глобальной ссылки

Слой JNI среды выполнения Android поддерживает только ограниченное число действительных ссылок на объекты JNI в любой момент времени. При превышении этого ограничения происходит прерывание операции.

Ограничение глобальных ссылок составляет 2000 ссылок для эмулятора и примерно 52 000 ссылок для оборудования.

Вы понимаете, что глобальных ссылок становится слишком много, когда в журнале отладки Android появляются такие сообщения:

При достижении предельного значения глобальных ссылок выводится следующее сообщение:

В приведенном выше примере (который, кстати, является результатом ошибки 685215) проблема заключается в том, что создается слишком много экземпляров Android.Graphics.Point. Список исправлений для этой ошибки см. в комментарии #2.

Как правило, следует узнать, у какого типа слишком много выделенных экземпляров — Android.Graphics.Point в приведенном выше дампе, — а затем найти, где они создаются в исходном коде, и избавиться от них соответствующим образом (чтобы сократить время существования их Java-объекта). Это не всегда подходящее решение (#685215 является многопоточным, поэтому стандартное решение позволяет избежать вызова Dispose), но это первое, о чем следует подумать.

Вы можете включить Ведения журнала глобальных ссылок, чтобы увидеть, когда глобальные ссылки создаются и сколько их.

Прерывание из-за несоответствия типов JNI

Если вы вручную развертываете код JNI, типы могут сопоставляться неправильно, например при попытке вызвать java.lang.Runnable.run для типа, который не реализует java.lang.Runnable . В этом случае в журнале отладки Android будет отображаться примерно следующее сообщение:

Поддержка динамического кода

Динамический код не компилируется

Чтобы использовать в приложении или библиотеке динамический C#, необходимо добавить в проект файлы System.Core.dll, Microsoft.CSharp.dll и Mono.CSharp.dll.

В сборке выпуска исключение MissingMethodException возникает для динамического кода во время выполнения.

Скорее всего, проект приложения не имеет ссылок на System.Core.dll, Microsoft.CSharp.dll или Mono.CSharp.dll. Убедитесь, что ссылки на эти сборки существуют.

  • Помните, что динамический код всегда связан с затратами. Если вам важна эффективность, рекомендуется не использовать динамический код.

В первой предварительной версии эти сборки были исключены, если в коде приложения явно не использовались типы в каждой сборке. Обходное решение см. на этой странице: http://lists.ximian.com/pipermail/mo. il/009798.html

Проекты, созданные с помощью AOT + LLVM, завершаются сбоем на устройствах x86

При развертывании приложения, созданного с помощью AOT + LLVM на устройствах на базе x86, может появиться сообщение об ошибке, похожее на следующее:

Это известная проблема — решение заключается в отключении LLVM.

Источник

Оцените статью