我们正在使用Azure DevOps内部部署Xamarin android应用。该应用程序自VS2019起即可顺利构建,部署和运行。我们还可以使用Android Package Signing选项对我们的apk进行签名。
从Azure DevOps构建,签名和放置.apk效果很好,但是(分别)我们遇到了挂起和崩溃。如果我们纠正挂起,则会发生崩溃。
在选中“ Zipalign”选项之前,我们的应用程序将挂在SplashActivity上。选中“ Zipalign”选项后,我们的应用程序似乎从SplashActivity切换到MainActivity,但随后崩溃并显示“应用程序停止运行”。从这里尝试什么?不知道如何调试问题,因为从VS部署调试或发布时不会发生这种情况。
Edit1
尝试实施错误处理以捕获错误,但似乎没有受到打击。
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
AppDomain.CurrentDomain.UnhandledException
+= CurrentDomainOnUnhandledException;
System.Threading.Tasks.TaskScheduler.UnobservedTaskException
+= TaskSchedulerOnUnobservedTaskException;
Android.Runtime.AndroidEnvironment.UnhandledExceptionRaiser
+= OnAndroidEnvironmentUnhandledExceptionRaiser;
global::Xamarin.Forms.Forms.Init(this, bundle);
DisplayCrashReport();
LoadApplication(new App());
}
#region Error handling
public static void TaskSchedulerOnUnobservedTaskException(object sender,
System.Threading.Tasks.UnobservedTaskExceptionEventArgs unobservedTaskExceptionEventArgs)
{
var newExc = new Exception("TaskSchedulerOnUnobservedTaskException", unobservedTaskExceptionEventArgs.Exception);
LogUnhandledException(newExc);
}
public static void CurrentDomainOnUnhandledException(object sender,
UnhandledExceptionEventArgs unhandledExceptionEventArgs)
{
var newExc = new Exception("CurrentDomainOnUnhandledException", unhandledExceptionEventArgs.ExceptionObject as Exception);
LogUnhandledException(newExc);
}
private void OnAndroidEnvironmentUnhandledExceptionRaiser(object sender,
Android.Runtime.RaiseThrowableEventArgs unhandledExceptionEventArgs)
{
var newExc = new Exception("OnAndroidEnvironmentUnhandledExceptionRaiser", unhandledExceptionEventArgs.Exception);
LogUnhandledException(newExc);
}
internal static void LogUnhandledException(System.Exception exception)
{
try
{
const string errorFileName = "Fatal.log";
var libraryPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal); // iOS: Environment.SpecialFolder.Resources
var errorFilePath = System.IO.Path.Combine(libraryPath, errorFileName);
var errorMessage = System.String.Format("Time: {0}\r\nError: Unhandled Exception\r\n{1}",
System.DateTime.Now, exception.ToString());
System.IO.File.WriteAllText(errorFilePath, errorMessage);
// Log to Android Device Logging.
Android.Util.Log.Error("Crash Report", errorMessage);
}
catch
{
// just suppress any error logging exceptions
}
}
/// <summary>
// If there is an unhandled exception, the exception information is diplayed
// on screen the next time the app is started
/// </summary>
[System.Diagnostics.Conditional("DEBUG")]
public void DisplayCrashReport()
{
const string errorFilename = "Fatal.log";
var libraryPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
var errorFilePath = System.IO.Path.Combine(libraryPath, errorFilename);
if (!System.IO.File.Exists(errorFilePath))
{
return;
}
var errorText = System.IO.File.ReadAllText(errorFilePath);
new Android.App.AlertDialog.Builder(this)
.SetPositiveButton("Clear", (sender, args) =>
{
System.IO.File.Delete(errorFilePath);
})
.SetNegativeButton("Close", (sender, args) =>
{
// User pressed Close.
})
.SetMessage(errorText)
.SetTitle("Crash Report! MainActivity")
.Show();
}
#endregion
答案 0 :(得分:0)
尝试将yaml文件的HOST MACHINE vmImage属性从“ 托管的VS2017 ”更改为 windows-2019