Giới thiệu .NET MAUI - Một mã lệnh, Đa nền tảng

Chào mừng bạn đến với Giao diện người dùng ứng dụng đa nền tảng .NET. Bản phát hành này đánh dấu một cột mốc mới trong hành trình nhiều năm của Microsoft để thống nhất nền tảng .NET. Giờ đây, hơn 5 triệu nhà phát triển .NET khác có ngăn xếp giao diện người dùng đa nền tảng, hướng mục tiêu đến Android, iOS, macOS và Windows để bổ sung cho chuỗi công cụ .NET (SDK) và thư viện lớp cơ sở (BCL). Bạn có thể xây dựng bất cứ thứ gì với .NET.

Đây chỉ là bước khởi đầu trong hành trình của Microsoft để tạo ra trải nghiệm ứng dụng dành cho máy tính để bàn và thiết bị di động làm hài lòng các nhà phát triển .NET. Đối với giai đoạn tiếp theo, nền tảng hiện đã được thiết lập cho hệ sinh thái .NET rộng lớn hơn để mang các plugin, thư viện và dịch vụ từ .NET Framework và hệ thống dự án cũ sang các dự án kiểu .NET 6 và SDK. Trong số những người có sẵn ngày hôm nay là:

Khối lượng công việc .NET MAUI được hỗ trợ đầy đủ theo lịch trình phát hành Hiện tại là 18 tháng và sẽ được bảo dưỡng cùng nhịp hàng tháng với .NET. Trọng tâm liên tục của Microsoft đối với .NET MAUI tiếp tục là chất lượng, giải quyết các vấn đề đã biết và ưu tiên các vấn đề dựa trên phản hồi của bạn. Điều này cũng bao gồm khối lượng công việc mà chúng tôi giao để xây dựng các ứng dụng nhắm mục tiêu riêng đến Android, Android Wear, CarPlay, iOS, macOS và tvOS trực tiếp bằng cách sử dụng bộ công cụ gốc từ .NET và các thư viện hỗ trợ AndroidX, Facebook, Firebase, Google Play Services và SkiaSharp.

Với .NET MAUI, bạn có thể đạt được trải nghiệm người dùng không bị ảnh hưởng trong khi chia sẻ nhiều mã lệnh hơn bao giờ hết. .NET MAUI sử dụng giao diện người dùng gốc thông qua bộ công cụ ứng dụng hàng đầu được cung cấp bởi mỗi nền tảng, năng suất của nhà phát triển hiện đại và nền tảng di động nhanh nhất của chúng tôi.

Giao diện người dùng gốc

Mục tiêu chính của .NET MAUI là cho phép bạn cung cấp trải nghiệm ứng dụng tốt nhất được thiết kế đặc biệt theo từng nền tảng (Android, iOS, macOS, Windows và Tizen nhờ sự hợp tác với Samsung), đồng thời cho phép bạn tạo ra trải nghiệm thương hiệu nhất quán thông qua kiểu dáng và đồ họa phong phú. Ngoài ra, mỗi nền tảng trông và hoạt động theo cách mà nó cần mà không cần bất kỳ tiện ích hoặc kiểu dáng bổ sung nào để bắt chước. Ví dụ: .NET MAUI trên Windows được hỗ trợ bởi WinUI 3, thành phần giao diện người dùng gốc hàng đầu đi kèm với Windows App SDK.

Sử dụng C # và XAML để xây dựng ứng dụng của bạn từ bộ công cụ phong phú gồm hơn 40 điều khiển, bố cục và trang. Trên Xamarin của điều khiển di động, .NET MAUI bổ sung hỗ trợ cho các ứng dụng máy tính để bàn nhiều cửa sổ, thanh menu và khả năng hoạt ảnh mới, đường viền, góc, bóng, đồ họa, v.v. Ồ, và BlazorWebView mới mà tôi sẽ đánh dấu bên dưới.

Đọc thêm trong tài liệu .NET MAUI về các điều khiển: pages, layouts, and views.

Khả năng tiếp cận đầu tiên

Một lợi thế chính của việc sử dụng giao diện người dùng gốc là hỗ trợ khả năng truy cập kế thừa mà chúng tôi có thể xây dựng dựa trên các dịch vụ ngữ nghĩa để giúp việc tạo các ứng dụng có khả năng truy cập cao dễ dàng hơn bao giờ hết. Chúng tôi đã làm việc chặt chẽ với khách hàng để thiết kế lại cách chúng tôi phát triển khả năng tiếp cận. Từ những cuộc trò chuyện này, chúng tôi đã thiết kế các dịch vụ ngữ nghĩa .NET MAUI để kiểm soát:

  • Các thuộc tính như mô tả, gợi ý và cấp tiêu đề (Properties such as description, hint, and heading level)
  • Tiêu điểm (Focus)
  • Đọc màn hình (Screen reader)
  • Thuộc tính tự động hóa (Automation properties)

Đọc thêm trong tài liệu .NET MAUI về các dịch vụ ngữ nghĩa cho khả năng truy cập.

Ngoài giao diện người dùng

.NET MAUI cung cấp các API đơn giản để truy cập các dịch vụ và tính năng của từng nền tảng như gia tốc kế, hành động ứng dụng, hệ thống tệp, thông báo, v.v. Trong ví dụ này, chúng tôi định cấu hình "hành động ứng dụng" để thêm các tùy chọn menu vào biểu tượng ứng dụng trên mỗi nền tảng:

AppActions.SetAsync(
    new AppAction("current_info", "Check Current Weather", icon: "current_info"),
    new AppAction("add_location", "Add a Location", icon: "add_location")
);

Đọc thêm trong tài liệu .NET MAUI về cách truy cập các dịch vụ và tính năng của nền tảng.

Dễ dàng tùy chỉnh

Cho dù bạn đang mở rộng khả năng của các điều khiển .NET MAUI hay thiết lập chức năng nền tảng mới, .NET MAUI được kiến trúc để có khả năng mở rộng, vì vậy bạn không bao giờ gặp sự cố. Lấy ví dụ: Điều khiển nhập liệu - một ví dụ chính tắc về kiểm soát hiển thị khác nhau trên một nền tảng. Android vẽ một gạch chân bên dưới trường văn bản và các nhà phát triển thường muốn xóa gạch chân đó. Với .NET MAUI, việc tùy chỉnh mọi Mục nhập trong toàn bộ dự án của bạn chỉ là một vài dòng mã:

#if ANDROID
Microsoft.Maui.Handlers.EntryHandler.Mapper.ModifyMapping("NoUnderline", (h, v) =>
{
    h.PlatformView.BackgroundTintList = ColorStateList.ValueOf(Colors.Transparent.ToPlatform());
});
#endif

Đây là một ví dụ tuyệt vời gần đây về việc tạo điều khiển nền Bản đồ mới của Cayas Software. Bài đăng trên blog trình bày việc tạo trình xử lý để kiểm soát, triển khai cho từng nền tảng và sau đó làm cho kiểm soát khả dụng bằng cách đăng ký nó trong .NET MAUI.

.ConfigureMauiHandlers(handlers =>
{
    handlers.AddHandler(typeof(MapHandlerDemo.Maps.Map),typeof(MapHandler));
})

Đọc thêm trong tài liệu .NET MAUI về cách tùy chỉnh điều khiển với trình xử lý

Năng suất của nhà phát triển hiện đại

Không chỉ là một công nghệ có thể xây dựng bất cứ thứ gì, Microsoft muốn .NET còn tăng tốc năng suất của bạn bằng cách sử dụng các tính năng, mẫu và thực hành ngôn ngữ chung cũng như công cụ.

.NET MAUI sử dụng các tính năng C# 10 mới được giới thiệu trong .NET 6, bao gồm toàn cầu sử dụng câu lệnh và không gian tên phạm vi tệp - tuyệt vời để giảm sự lộn xộn và vụn vặt trong tệp của bạn. Và .NET MAUI đưa tính năng đa nhắm mục tiêu lên một tầm cao mới với trọng tâm là "một dự án".

Trong các dự án .NET MAUI mới, các nền tảng được ẩn trong một thư mục con để tập trung vào ứng dụng của bạn, nơi bạn dành phần lớn nỗ lực của mình. Trong thư mục Tài nguyên của dự án, bạn có một nơi duy nhất để quản lý phông chữ, hình ảnh, biểu tượng ứng dụng, màn hình giật gân, nội dung thô và kiểu của ứng dụng. .NET MAUI sẽ thực hiện công việc để tối ưu hóa chúng cho các yêu cầu riêng của từng nền tảng.

Nhiều dự án so với Một dự án Cấu trúc giải pháp của bạn với Các dự án riêng lẻ cho từng nền tảng vẫn được hỗ trợ, vì vậy bạn có thể chọn thời điểm cách tiếp cận dự án đơn lẻ phù hợp với ứng dụng của mình.

.NET MAUI sử dụng mẫu trình tạo phổ biến với các thư viện Microsoft.Extensions trong các ứng dụng ASP.NET và Blazor như một nơi duy nhất để khởi tạo và định cấu hình ứng dụng của bạn. Từ đây, bạn có thể cung cấp .NET MAUI với phông chữ của mình, khai thác các sự kiện vòng đời cụ thể của nền tảng, định cấu hình phụ thuộc, bật các tính năng cụ thể, bật bộ công cụ kiểm soát của nhà cung cấp, v.v.

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureServices()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("Segoe-Ui-Bold.ttf", "SegoeUiBold");
                fonts.AddFont("Segoe-Ui-Regular.ttf", "SegoeUiRegular");
                fonts.AddFont("Segoe-Ui-Semibold.ttf", "SegoeUiSemibold");
                fonts.AddFont("Segoe-Ui-Semilight.ttf", "SegoeUiSemilight");
            });
        return builder.Build();
    }
}
public static class ServicesExtensions
{
    public static MauiAppBuilder ConfigureServices(this MauiAppBuilder builder)
    {
        builder.Services.AddMauiBlazorWebView();
        builder.Services.AddSingleton<SubscriptionsService>();
        builder.Services.AddSingleton<ShowsService>();
        builder.Services.AddSingleton<ListenLaterService>();
#if WINDOWS
        builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.Windows.NativeAudioService>();
#elif ANDROID
        builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.Android.NativeAudioService>();
#elif MACCATALYST
        builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.MacCatalyst.NativeAudioService>();
        builder.Services.TryAddSingleton< Platforms.MacCatalyst.ConnectivityService>();
#elif IOS
        builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.iOS.NativeAudioService>();
#endif

        builder.Services.TryAddTransient<WifiOptionsService>();
        builder.Services.TryAddSingleton<PlayerService>();

        builder.Services.AddScoped<ThemeInterop>();
        builder.Services.AddScoped<ClipboardInterop>();
        builder.Services.AddScoped<ListenTogetherHubClient>(_ =>
            new ListenTogetherHubClient(Config.ListenTogetherUrl));
        return builder;
    }
}

Đọc thêm trong tài liệu .NET MAUI về khởi động ứng dụng với MauiProgrammột dự án.

Đưa Blazor lên máy tính để bàn và thiết bị di động

.NET MAUI cũng tuyệt vời cho các nhà phát triển web muốn tham gia vào hành động với các ứng dụng máy khách gốc. .NET MAUI tích hợp với Blazor, vì vậy bạn có thể sử dụng lại các thành phần giao diện người dùng web Blazor hiện có trực tiếp trong các ứng dụng dành cho thiết bị di động và máy tính để bàn. Với .NET MAUI và Blazor, bạn có thể sử dụng lại các kỹ năng phát triển web của mình để xây dựng các ứng dụng khách gốc đa nền tảng và xây dựng một giao diện người dùng duy nhất trải dài trên thiết bị di động, máy tính để bàn và web.

.NET MAUI thực thi các thành phần Blazor của bạn nguyên bản trên thiết bị (không cần WebAssembly) và hiển thị chúng thành điều khiển chế độ xem web được nhúng. Vì các thành phần Blazor của bạn biên dịch và thực thi trong quy trình .NET, chúng không giới hạn ở nền tảng web và có thể tận dụng bất kỳ tính năng nền tảng gốc nào, như thông báo, Bluetooth, vị trí địa lý và cảm biến, hệ thống tệp, v.v. Bạn thậm chí có thể thêm các điều khiển giao diện người dùng gốc cùng với giao diện người dùng web Blazor của mình. Đây là một loại ứng dụng lai hoàn toàn mới: Blazor Hybrid!

Bắt đầu với .NET MAUI và Blazor thật dễ dàng: chỉ cần sử dụng mẫu dự án Ứng dụng .NET MAUI Blazor đi kèm.

Tất cả mẫu này đã được thiết lập để bạn có thể bắt đầu tạo ứng dụng .NET MAUI Blazor bằng HTML, CSS và C #. Hướng dẫn Blazor Hybrid cho .NET MAUI sẽ hướng dẫn bạn cách xây dựng và chạy ứng dụng .NET MAUI Blazor đầu tiên của bạn.

Hoặc thêm điều khiển BlazorWebView vào ứng dụng .NET MAUI hiện có ở bất kỳ đâu bạn muốn bắt đầu sử dụng các thành phần Blazor:

<BlazorWebView HostPage="wwwroot/index.html">
    <BlazorWebView.RootComponents>
        <RootComponent Selector="#app" ComponentType="{x:Type my:Counter}" />
    </BlazorWebView.RootComponents>
</BlazorWebView>

Hỗ trợ Blazor Hybrid hiện cũng có sẵn cho WPF và Windows Forms để bạn có thể bắt đầu hiện đại hóa các ứng dụng dành cho máy tính để bàn hiện có của mình để chạy trên web hoặc chạy trên nhiều nền tảng với .NET MAUI. Các điều khiển BlazorWebView cho WPF và Windows Forms có sẵn trên NuGet. Hãy xem hướng dẫn Blazor Hybrid dành cho WPF và Windows Forms để tìm hiểu cách bắt đầu.

Để tìm hiểu thêm về hỗ trợ Blazor Hybrid cho các biểu mẫu .NET MAUI, WPF và Windows, hãy xem tài liệu Blazor Hybrid.

Tối ưu hóa cho tốc độ

.NET MAUI được thiết kế cho hiệu suất. Bạn đã cho chúng tôi biết tầm quan trọng của việc ứng dụng của bạn khởi động nhanh nhất có thể, đặc biệt là trên Android. Các điều khiển giao diện người dùng trong .NET MAUI triển khai mẫu trình xử lý ánh xạ mỏng, được tách riêng trên các điều khiển nền tảng gốc. Điều này làm giảm số lượng các lớp trong việc hiển thị giao diện người dùng và đơn giản hóa việc tùy chỉnh điều khiển.

Các bố cục trong .NET MAUI đã được kiến ​​trúc để sử dụng mẫu trình quản lý nhất quán giúp tối ưu hóa thước đo và sắp xếp các vòng lặp để hiển thị và cập nhật giao diện người dùng của bạn nhanh hơn. Chúng tôi cũng đã hiển thị các bố cục được tối ưu hóa trước cho các tình huống cụ thể như HorizontalStackLayoutVerticalStackLayout ngoài StackLayout.

Ngay từ đầu của hành trình này, chúng tôi đã đặt mục tiêu cải thiện hiệu suất khởi động và duy trì hoặc giảm kích thước ứng dụng khi chúng tôi chuyển sang .NET 6. Tại thời điểm GA, chúng tôi đã đạt được 34,9% cải tiến cho .NET MAUI và 39,4 % cải tiến trong .NET dành cho Android. Những lợi ích đó cũng mở rộng cho các ứng dụng phức tạp; ứng dụng mẫu .NET Podcast bắt đầu khi khởi động 1299ms và ở GA đo được 814,2ms, cải thiện 37,3% kể từ Preview 13.

Cài đặt được bật theo mặc định để cung cấp một bản phát hành với những tối ưu hóa này.

Bắt đầu từ hôm nay

Để bắt đầu sử dụng .NET MAUI trên Windows, hãy cài đặt hoặc cập nhật Visual Studio 2022 phiên bản 17.3. Trong trình cài đặt, chọn khối lượng công việc “Phát triển giao diện người dùng ứng dụng đa nền tảng .NET”.

Visual Studio 2022 sẽ hỗ trợ công cụ GA .NET MAUI vào cuối năm 2021. Trên Windows ngày nay, bạn có thể tăng tốc vòng lặp nhà phát triển của mình với XAML và .NET Hot Tải lại cũng như các trình chỉnh sửa mạnh mẽ cho XAML, C #, Razor và CSS trong số những người khác. Sử dụng XAML Live Preview và Live Visual Tree, bạn có thể xem trước, căn chỉnh, kiểm tra giao diện người dùng của mình và chỉnh sửa nó trong khi gỡ lỗi. Trải nghiệm dự án đơn lẻ mới của .NET MAUI hiện bao gồm các trang thuộc tính dự án để có trải nghiệm chỉnh sửa trực quan nhằm định cấu hình ứng dụng của bạn với nhắm mục tiêu đa nền tảng.

Trên máy Mac, ngày nay bạn có thể tải các giải pháp .NET MAUI cho một dự án và nhiều dự án để gỡ lỗi bằng trải nghiệm Visual Studio 2022 gốc mới, đẹp mắt dành cho Mac. Các tính năng khác để nâng cao năng suất của bạn khi phát triển các ứng dụng .NET MAUI sẽ được cung cấp trong các bản tiếp theo.

Chúng tôi khuyên bạn nên bắt đầu cập nhật thư viện của mình lên .NET MAUI và tạo các dự án .NET MAUI mới ngay hôm nay. Trước khi đi sâu vào chuyển đổi các dự án Xamarin sang .NET MAUI, hãy xem lại các phụ thuộc của bạn, trạng thái hỗ trợ Visual Studio cho .NET MAUI và các vấn đề đã biết đã xuất bản để xác định thời điểm thích hợp để chuyển đổi. Hãy nhớ rằng Xamarin sẽ tiếp tục được hỗ trợ theo chính sách vòng đời hiện đại, quy định 2 năm kể từ lần phát hành chính cuối cùng.

Tổng kết

Với .NET MAUI, bạn có thể tạo các ứng dụng gốc cho Android, iOS, macOS, Tizen và Windows từ một cơ sở mã duy nhất bằng cách sử dụng các mẫu năng suất giống nhau được thực hành trên toàn bộ .NET. Kiến trúc bố cục và giao diện người dùng mỏng và được tách biệt của .NET MAUI cùng với các tính năng dự án đơn lẻ cho phép bạn tập trung vào một ứng dụng thay vì tập trung vào các nhu cầu riêng biệt của nhiều nền tảng. Và với .NET 6, chúng tôi đang vận chuyển các cải tiến về hiệu suất không chỉ dành cho Android mà còn trên phạm vi rộng của các mục tiêu nền tảng.

Ít mã nền tảng hơn, nhiều mã được chia sẻ hơn, các tiêu chuẩn và mẫu nhất quán, kiến trúc nhẹ và hiệu quả, trải nghiệm gốc trên thiết bị di động và máy tính để bàn - đây mới chỉ là bước khởi đầu. Chúng tôi mong muốn được thấy các thư viện và hệ sinh thái rộng lớn hơn đi cùng với .NET MAUI trong những tháng tiếp theo để xác định kỷ nguyên phát triển ứng dụng đa nền tảng mới cho các nhà phát triển .NET giúp bạn và tổ chức của bạn đạt được nhiều thành tựu hơn.