{"record":{"id":"a4e507c8612296f2","repo":"AvaloniaUI/Avalonia","slug":"android-backend-wasn-t-initialized-make-sure-use","errorCode":null,"errorMessage":"Android backend wasn't initialized. Make sure .UseAndroid() was executed.","messagePattern":"Android backend wasn't initialized\\. Make sure \\.UseAndroid\\(\\) was executed\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"critical","filePath":"src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs","lineNumber":107,"sourceCode":"        public Action<RawInputEventArgs>? Input { get; set; }\n\n        public Action<Rect>? Paint { get; set; }\n\n        public Action<Size, WindowResizeReason>? Resized { get; set; }\n\n        public Action<double>? ScalingChanged { get; set; }\n\n        public View? View => _view;\n\n        internal InvalidationAwareSurfaceView? InternalView => _view;\n\n        public double DesktopScaling => RenderScaling;\n        public IPlatformHandle Handle { get; }\n\n        public IPlatformRenderSurface[] Surfaces { get; }\n\n        public Compositor Compositor => AndroidPlatform.Compositor ??\n            throw new InvalidOperationException(\"Android backend wasn't initialized. Make sure .UseAndroid() was executed.\");\n\n        public Point PointToClient(PixelPoint point)\n        {\n            return point.ToPoint(RenderScaling);\n        }\n\n        public PixelPoint PointToScreen(Point point)\n        {\n            return PixelPoint.FromPoint(point, RenderScaling);\n        }\n\n        public void SetCursor(ICursorImpl? cursor)\n        {\n            //still not implemented\n        }\n\n        public void SetInputRoot(IInputRoot inputRoot)\n        {","sourceCodeStart":89,"sourceCodeEnd":125,"githubUrl":"https://github.com/AvaloniaUI/Avalonia/blob/11c542726898ae954a1ef668c65ec79ec92ab17d/src/Android/Avalonia.Android/Platform/SkiaPlatform/TopLevelImpl.cs#L89-L125","documentation":"Thrown by TopLevelImpl.Compositor when AndroidPlatform.Compositor is null, meaning the Android platform backend was never initialized. Avalonia.Android requires that the application builder calls .UseAndroid() (which registers AndroidPlatform and creates the Compositor) before any TopLevel is used.","triggerScenarios":"Accessing TopLevelImpl.Compositor (transitively, most rendering and layout operations) before the Avalonia Android platform has been initialized. .UseAndroid() is normally invoked by the generated AvaloniaMainActivity/AppBuilder; omitting it or calling it too late leaves AndroidPlatform.Compositor null.","commonSituations":"A custom Activity that does not extend AvaloniaMainActivity or AvaloniaFragmentActivity (which call UseAndroid() automatically); building the AppBuilder manually and forgetting .UseAndroid(); initializing a TopLevel (e.g. via tests or eager view construction) before AppBuilder.Setup completes; library code that constructs Avalonia views during static init.","solutions":["Ensure your Activity extends AvaloniaMainActivity<T> (or AvaloniaFragmentActivity) so .UseAndroid() runs in OnCreate before any view is created.","If building AppBuilder manually, chain .UseAndroid() before .Setup().","Defer any Avalonia view/TopLevel creation until after AppBuilder.Setup() has completed (e.g. inside AvaloniaMainActivity.CreateAppBuilder or OnCreate post-setup).","In unit tests, initialize the Android platform via the test bootstrap before constructing views."],"exampleFix":"// before\npublic class MainActivity : Activity\n{\n    protected override void OnCreate(Bundle? b)\n    {\n        base.OnCreate(b);\n        var view = new AvaloniaView(this); // no UseAndroid() ever\n        SetContentView(view);\n    }\n}\n\n// after\npublic class MainActivity : AvaloniaMainActivity<MyApp>\n{\n    // UseAndroid() is called by the base class automatically\n}","handlingStrategy":"validation","validationCode":"// verify the backend is initialized before using any TopLevel\nif (AvaloniaLocator.Current.GetService<AndroidPlatform>()?.Compositor is null)\n    throw new InvalidOperationException(\"Call AppBuilder.UseAndroid() before creating views.\");","typeGuard":"static bool IsAndroidBackendReady()\n    => AvaloniaLocator.Current.GetService<AndroidPlatform>()?.Compositor is not null;","tryCatchPattern":null,"preventionTips":["Extend AvaloniaMainActivity<TApp> / AvaloniaFragmentActivity so UseAndroid() runs automatically.","Build AppBuilder with .UseAndroid() before .Setup().","Create Avalonia views only after AppBuilder.Setup() completes.","Initialize the Android platform in test bootstraps before constructing views."],"tags":["android","initialization","appbuilder","compositor","startup"],"backgroundTag":null,"analyzedSha":"11c542726898ae954a1ef668c65ec79ec92ab17d","analyzedAt":"2026-08-13T11:57:40.261Z","schemaVersion":2},"datasetVersion":"2026-08-13T14:17:21.547Z"}