Xamarin android httpclient не работает

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

HttpClient на Xamarin.Forms Android не отвечает и зависает (Prism)

У меня есть очень простое приложение MVVM, использующее Xamarin Forms и Prism, созданное из шаблона Prism Xamarin.

Когда я инициализирую новую ViewModel, я пытаюсь выполнить вызов API, в UWP это работает без каких-либо проблем, но на Android он просто зависает и не возвращает никаких ошибок или не вызывает никаких исключений.

Я упростил код до того места, где возникает ошибка, и протестировал его с помощью URI, который может использовать каждый.

Я использую следующие NuGgets

  • Prism.Core v8.0.0.1909
  • Prism.Dryloc.Forms v8.0.0.1909
  • Xamarin.Forms v4.8.0.1687

Я установил реализацию HttpClient на Android и Native TLS 1.2+.

Я просмотрел несколько других сообщений, которые кажутся похожими, но мне не понравилось исправление проблемы. Может ли кто-нибудь пролить свет на то, как я могу устранить эту проблему или заставить ее работать?

2 ответа

После того, как я исправил это некоторое время и ударился головой о кирпичную стену, я наконец понял, что пошло не так.

Step through на Android не переходил строку 7 ниже, и экран не перерисовывался.

Когда я повернул телефон на 90 градусов, экран перерисовывался, и я мог видеть, что запрос сработал.

У меня была такая же проблема, когда я начал работать с Xamarin.

Я также создал библиотеку, которая может вам очень помочь, под названием Rest .API.Translator Вы также можете найти его на nuget

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

.Await — это расширение, которое я создал, чтобы убедиться, что между HTTP-вызовами не возникает проблем с перекрытием и зависанием.

Источник

Xamarin android httpclient не работает

It worked for me:

1- Http Client Implementations = Managed 2- SSL/TLS implementation = Native TLS 1.2 +

var client = new HttpClient(new AndroidClientHandler());

var response = await _client.GetAsync(Url); var content = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject (content);

More information: blog.xamarin.com/securing-web-requests-with-tls-1-2

1- Http Client Implementations = Managed 2- SSL/TLS implementation = Native TLS 1.2 +

var client = new HttpClient(new AndroidClientHandler());

var response = await _client.GetAsync(Url); var content = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject (content);

More information: blog.xamarin.com/securing-web-requests-with-tls-1-2

Thanks, issue is resolved!

1- Http Client Implementations = Managed 2- SSL/TLS implementation = Native TLS 1.2 +

var client = new HttpClient(new AndroidClientHandler());

var response = await _client.GetAsync(Url); var content = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject (content);

More information: blog.xamarin.com/securing-web-requests-with-tls-1-2

How can I solve the same problem for xamarin ios? My url addresses are in the form of https: // . The device works fine in my tests, but does not respond at all in testflight trials.

Источник

Xamarin Android PCL веб-запрос зависает

Я пытаюсь сделать PCL, который может делать веб-запросы для проекта Xamarin Android.

Мой AndoridManifest.xml выглядит следующим образом

Код в щелчке кнопки основной активности Android просто вызывает этот метод PCL Create напрямую.

У меня есть точки останова на линиях, где он выполняет SendAsync и где возвращает ноль, точка останова SendAsync получает удар, и когда вы переступаете через него, VS зависает на секунду, затем отображается эмулятор и приложение зависает — Android отображается вскоре после сообщения об отсутствии отвечать на ожидание или нет — точка останова исключения никогда не будет достигнута. Не исключение отображается в консоли

Вывод на консоль после нажатия кнопки, не уверен, полезно это или нет

Эмулятор работает под управлением Android 6, я проверил интернет с помощью встроенного браузера, и он работает. Я действительно смущен этим, любая помощь будет принята с благодарностью!

2 ответа

Я предполагаю, что у вас заканчивается память, которая заставляет вашу задачу завершиться. Я использовал код ниже, и все работает, как ожидалось. Я настроил проект как проект Xamarin.Android с Xamarin.PCL для части запроса. Я также создал макет для получения более чистого ответа. Я действительно не знаю, что вы делаете с XML, поэтому вы можете пропустить эту часть, если она не имеет отношения к делу.

Настройка проекта

Пакеты Nuget, установленные в PCL

Основная деятельность
Ниже основной деятельности Android

Xamarin.Portable (XamPCL)

Результат в MainActivity

Не уверен, что вызывает это. Однако я могу сделать GET запрос к своему веб-сервису. Я использую WebRequest вместо этого. Я приведу код ниже, и вы можете попробовать это.

Источник

Приложение, работающее в эмуляторе Android, не может выполнить HTTP-публикацию на localhost

Я не могу выполнить HTTP Post с приложением, запущенным в Android Emulator .

  • Я использую IP-адрес, созданный Конвейером Keyoti
  • Я установил сертификат безопасности на эмуляторе, который требуется Конвейер от Keyoti
  • Я поменял местами атрибут Microsoft.AspNetCore.Mvc.HttpPost с System.Web.Http.HttpPost
  • Успешно: HTTP Get
  • Ошибка: сообщение HTTP

Интеграционный тест .

  • Успешно: HTTP Post (с использованием той же конечной точки)

Я написал автоматический тест, который вызывает ту же реализацию HTTP Post. Поскольку я успешно выполнил тот же код на своем ноутбуке с помощью автоматического теста, я не думаю, что проблема заключается в самом коде:

Читайте также:  Первобытные войны для андроида

В заключение я выделил среду для эмулятора Android, а не для своего ноутбука. Следовательно, эмулятор может успешно запустить HTTP Get. Тем не менее, он не может выполнить HTTP Post, хотя мое портативное устройство может сделать и то, и другое.

В частности, я установил еще один сертификат безопасности на эмуляторе Android.

Затем я смог наблюдать HTTP Get на эмуляторе Android.

Тем не менее, я продолжаю получать сообщение об ошибке HTTP Post.

Если я запускаю приложение с физического устройства Android, я наблюдаю следующее:

Новое обновление .

Я отключил отладку только моего кода в реализации сервера и обнаружил следующее исключение:

Источник

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

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

В 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. Диагностические данные отображаются на панели ошибок (Просмотр > ошибок Pad ). для этого нажмите кнопку выходные данные построения.

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

Чтобы включить ведение журнала развертывания устройств в 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. моно. Debug: Если непустая строка, это эквивалентно значению .

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

Так как значение | разделено, оно должно иметь дополнительный уровень заключения в кавычки, так как команда «|» удалит набор кавычек.

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

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

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

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

Debug. моно. Trace: разрешает установку параметра Mono—Trace .

Удаление 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). Во время обработки моста среда не приостанавливается.

В целом, чем больше значение , тем больше времени 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-Sequence результирующий Греф будет иметь то же значение, что и исходное значение Греф. Это упрощает обработку журналов.

Но в 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и устройств можно указать в Project свойства > поддерживаемые архитектуры вкладки приложения.

В отладочных сборках используется пакет 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. для этого выберите: сервис параметры > Project и > и > и установите для этого параметра значение >.

Выполните сборку повторно и проверьте область вывода 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 определяет, какие общие библиотеки требуются для элемента . Если на целевом устройстве отсутствует необходимая библиотека (например , значение по умолчанию — true), установка пакета завершится с INSTALL_FAILED_MISSING_SHARED_LIBRARY.

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

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

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). Иногда, по неизвестным причинам, при установке в уже установленном приложении установка завершается с ошибкой :

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

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

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

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

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

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

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

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

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

Свойство свойства Path не задано для проекта «MyApp. csproj»

Обычно это означает, что у вас есть компьютер HP и переменной среды «Platform» задано нечто вроде MCD или ХПД. это противоречит свойству платформы MSBuild, для которой обычно задано значение «любой цп» или «x86». Необходимо удалить эту переменную среды с компьютера, чтобы MSBuild мог работать:

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

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

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

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

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

Чтобы обойти это решение, используйте предоставленные типы коллекций Java вместо типов для «внутренних» типов. Это приведет к появлению соответствующих типов 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. точка в приведенном выше дампе — затем найдите место, где они создаются в исходном коде, и удалите их соответствующим образом (чтобы сократить время существования 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.

Источник

Читайте также:  Samsung galaxy a40 андроид 11
Оцените статью