У меня есть кнопка на моей главной странице, которая позволяет перейти к следующему представлению. Это отлично работает при отладочной сборке на смоделированном устройстве Android (Android 8.1 с ускорением x86) на моем ПК с Windows (Visual Studio 2017).
На мой взгляд, кнопка привязана к моей модели просмотра следующим образом:
<Button Text = "Report error" Command = "{Binding NewErrorCommand}" />
Код модели просмотра:
public Command NewErrorCommand
{
get
{
return _newErrorCommand ?? (_newErrorCommand = new Command(ExecuteNewErrorCommand, CanNewErrorCommand));
}
}
private bool CanNewErrorCommand(object arg)
{
return true;
}
private async void ExecuteNewErrorCommand(object obj)
{
try
{
// I'll get here in simulation/debug build but not in release build on device
await Application.Current.MainPage.DisplayAlert("Go", "Go", "Ok");
await _navigation.PushAsync(new TestView(), false);
}
catch (Exception exc)
{
await Application.Current.MainPage.DisplayAlert("Error", exc.Message, "Cancel");
}
}
Все мое приложение отлично работает с симулятором. Если я нажимаю кнопку на своем реальном физическом устройстве, я вижу визуальную обратную связь (кнопка меняет цвет), но вообще ничего не происходит.
Что я пробовал до сих пор:
DisplayAlert (не попал, см. исходный код)Можете ли вы помочь новичку в Xamarin.Forms?
Обновлять
Я подключил свой телефон Android через USB для отладки. Кнопка работает в режиме отладки (нажимает точки останова, открывает новую страницу), но все еще не работает в сборке релиза.
Настройки компоновщика по запросу:
@nmilcoff: добавлены настройки компоновщика релизной сборки
Не могли бы вы попробовать изменить раздел «Связывание» только на сборки SDK, а не на SDK и пользовательские сборки?
@nmilcoff: Да, вот и все! Релизная версия работает нормально, если я изменю раздел компоновщика на «Только сборки SDK». Большое спасибо за вашу помощь, я очень ценю это. Если вы сделаете свой комментарий ответом, я приму его как ответ. Еще лучше, если вы можете объяснить, почему это происходит.





Релизная версия будет работать, если вы установите для параметров связывания значение «Только сборки SDK» в разделе Build свойств проекта Android.
Когда компоновщик включен и установлен на «SDK и пользовательские сборки», много кода (который не используется) удаляется. В вашем случае свойство NewErrorCommand удаляется, потому что инструмент предполагает, что вы его не используете.
Он работает, если вы установите для него значение «Только сборки SDK», потому что в этой конфигурации компоновщик не будет касаться ваших собственных сборок.
Не могли бы вы приложить снимок экрана с конфигурацией компоновщика? Вы можете найти это в свойствах проекта Android, в разделе сборки