Отладки приложений для Android в течение нескольких секунд затем просто останавливаются

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

Во-первых, вот моя среда:

  1. Windows 10
  2. Visual Studio Community 2015 с установленной платформой Xamarin
  3. Контрольное устройство: G Pad 7.0 LTE
  4. Версия Android 5.0.2

Я следую этому руководству: учебник MSDN

Когда я иду отлаживать свое тестовое приложение, вот что происходит.

  • Выберите debug из Visual Studio с моим планшетом в качестве целевого
  • VS развертывается на планшет
  • Приложение запускается на планшете
  • Запуск приложения и отладки выполняется примерно 5-10 секунд.
  • Завершение сеанса отладки и закрытие приложения

Ошибки не отображаются в Visual Studio, и когда я включаю Android, регистрирующую это такое огромное переполнение информации, что я действительно не знаю, с чего начать поиск проблемы.

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

В промежутке между тем, когда он прекратил работу, я также добавил и успешно протестировал проект Windows Phone на устройстве Windows Phone.

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

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

Я также попробовал восстановить планшет до заводских настроек и снова проверить. Тот же сценарий: пустое приложение и учебное приложение запускаются в течение нескольких секунд, отладка останавливается, приложение закрывается.

Любая подсказка относительно того, на какую проблему я смотрю?

Ответ 1

Решение

  1. Очистите ваш проект (щелкните правой кнопкой мыши на Project и выберите clean)
  2. Перейдите в вашу папку сборки. Вероятно, в корневой папке вашего проекта Android с именем "obj". Удалите любую сборку, которая у вас была, когда вы столкнулись с этим поведением (отладка или выпуск).

Путь к каталогу

./AndroidProject/obj/Debug
./AndroidProject/obj/Release
  1. Перезапустите Visual Studio
  2. Создайте и запустите снова, и все должно работать нормально, так как хеши md5 теперь снова совпадают.

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

adb uninstall com.your.domain

История и справочная информация

Была такая же проблема с устройством под управлением Android 5.0.

По сути, приложение просто останавливалось без каких-либо заметок. Когда я теперь перезагружал телефон, журнал был расширен (один раз) следующей строкой:

Device could not find component named: *com.your.domain*/{*md5hash*}.*{Activity}

Оказывается, что в Andrpod 5.0 реализован механизм хеширования:

С выпуском 5.0 имена пакетов по умолчанию для Android Callable Wrappers будут основаны на MD5SUM полного имени сборки экспортируемого типа. Это позволяет предоставлять одно и то же полное имя из двух разных сборок и не получать ошибку упаковки. См. Это для получения дополнительной информации Xamarin.Android 5.1

Таким образом, если время от времени время от времени меняется хэш md5, простой очистки вашего проекта недостаточно.

Ответ 2

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

Возможно, связанное исправление, но, безусловно, стоит отметить

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

dream-team-mobile-blog - Android-приложение удаляет ярлык при обновлении решения Xamarin

В основном действии задайте атрибут Name

<your package>.<your main activity>

как:

com.mycompany.myapp.MainActivity

Для моего решения я решил сделать это в коде следующим образом:

[Activity(Name = Constants.PackageName + "." + nameof(MainActivity), 
Label = Constants.AppIconTitle, Icon = "@drawable/icon", 
Theme = "@style/splashscreen", MainLauncher = true, 
LaunchMode = LaunchMode.SingleInstance, 
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]

//Side Note:  I change my PackageName between Prod and SQA builds, so using
//a constant as seen above makes that change less risky to miss maintaining.
//Also, using nameof() keeps things tight and a sure match.

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity

Я упоминаю об этом здесь, в этом посте, потому что, имея это исправление, может иметь:

  1. определенно предотвратили потерю ярлыка приложения и
  2. возможно, помешало вопросу, обсуждаемому в этом сообщении

поскольку префикс хеша MD5 из основного действия, похоже, больше не генерируется.

Эта настройка может исправить две ошибки с одним исправлением. Если этого не произойдет, внедрение фиксированного основного имени активности, безусловно, поможет вашим пользователям сохранить ярлык вашего приложения при выпуске обновлений!

Ответ 3

Перейдите в свой AndroidManifest.xml и измените имя пакета.

Ответ 4

Что исправило это для меня в Visual Studio 2017 собирается:

Tools → Options → Xamarin → Android Settings

и снимите флажок:

Preserve Application data cache on device between deploys