Udostępnij za pośrednictwem


Określanie wielu platform z pojedynczego projektu programu .NET MAUI

Pojedynczy projekt interfejsu użytkownika aplikacji wieloplatformowej platformy (.NET MAUI) przyjmuje środowiska programistyczne specyficzne dla platformy, które zwykle napotykasz podczas tworzenia aplikacji i abstrakcji w jednym udostępnionym projekcie, który może być przeznaczony dla systemów Android, iOS, macOS i Windows.

Pojedynczy projekt MAUI platformy .NET zapewnia uproszczone i spójne środowisko programowania dla wielu platform, niezależnie od platform docelowych. Pojedynczy projekt .NET MAUI oferuje następujące funkcje:

  • Pojedynczy udostępniony projekt, który może być przeznaczony dla systemów Android, iOS, macOS, Tizen i Windows.
  • Uproszczony wybór celu debugowania na potrzeby uruchamiania aplikacji .NET MAUI.
  • Pliki zasobów udostępnionych w ramach pojedynczego projektu.
  • Jeden manifest aplikacji, który określa tytuł, identyfikator i wersję aplikacji.
  • Dostęp do interfejsów API i narzędzi specyficznych dla platformy, jeśli jest to wymagane.
  • Pojedynczy punkt wejścia aplikacji dla wielu platform.

Pojedynczy projekt .NET MAUI jest włączony przy użyciu wielowersyjności i korzystania z projektów w stylu zestawu SDK.

Pliki zasobów

Zarządzanie zasobami na potrzeby tworzenia aplikacji międzyplatformowych tradycyjnie było problematyczne, ponieważ każda platforma ma własne podejście do zarządzania zasobami. Na przykład każda platforma ma różne wymagania dotyczące obrazów, które zwykle obejmują tworzenie wielu wersji każdego obrazu w różnych rozdzielczościach. W związku z tym pojedynczy obraz musi być duplikowany wiele razy w różnych rozdzielczościach, a wynikowe obrazy muszą używać różnych konwencji nazw plików i folderów na każdej platformie.

Pojedynczy projekt .NET MAUI umożliwia przechowywanie plików zasobów w jednej lokalizacji podczas korzystania z każdej platformy. Obejmuje to czcionki, obrazy, ikonę aplikacji, ekran powitalny, nieprzetworzone zasoby i pliki CSS do tworzenia stylów aplikacji .NET MAUI. Każdy plik zasobu obrazu jest używany jako obraz źródłowy, z którego obrazy wymaganych rozdzielczości są generowane dla każdej platformy w czasie kompilacji.

Uwaga

Wykazy zasobów systemu iOS są obecnie nieobsługiwane w pojedynczych projektach programu .NET MAUI.

Pliki zasobów powinny być zwykle umieszczane w folderze Resources projektu aplikacji .NET MAUI lub folderach podrzędnych folderu Zasoby i muszą mieć poprawnie ustawioną akcję kompilacji. W poniższej tabeli przedstawiono akcje kompilacji dla każdego typu pliku zasobu:

Zasób Akcja kompilacji
Ikona aplikacji MauiIcon
Czcionki MauiFont
Obrazy MauiImage
Ekran powitalny MauiSplashScreen
Nieprzetworzone zasoby MauiAsset
Pliki CSS MauiCss

Uwaga

Pliki XAML są również przechowywane w projekcie aplikacji .NET MAUI i są automatycznie przypisywane akcji kompilacji MauiXaml podczas tworzenia przez szablony projektów i elementów. Jednak tylko słowniki zasobów XAML są zwykle umieszczane w folderze Resources projektu aplikacji.

Po dodaniu pliku zasobu do projektu aplikacji .NET MAUI odpowiedni wpis zasobu zostanie utworzony w pliku projektu z wyjątkiem plików CSS. Poniższy zrzut ekranu przedstawia typowy folder Resources zawierający foldery podrzędne dla każdego typu zasobu:

Zrzut ekranu zasobów obrazów i czcionek.

Akcja kompilacji dla pliku zasobu zostanie poprawnie ustawiona, jeśli zasób został dodany do odpowiedniego folderu podrzędnego Resources .

Foldery podrzędne folderu Resources można wyznaczyć dla każdego typu zasobu, edytując plik projektu dla aplikacji:

<ItemGroup>
    <!-- Images -->
    <MauiImage Include="Resources\Images\*" />

    <!-- Fonts -->
    <MauiFont Include="Resources\Fonts\*" />

    <!-- Raw assets -->
    <MauiAsset Include="Resources\Raw\*" />
</ItemGroup>

Symbol wieloznaczny (*) wskazuje, że wszystkie pliki w folderze będą traktowane jako określonego typu zasobu. Ponadto można uwzględnić wszystkie pliki z folderów podrzędnych:

<ItemGroup>
    <!-- Images -->
    <MauiImage Include="Resources\Images\**\*" />
</ItemGroup>

W tym przykładzie podwójny znak wieloznaczny ("**") określa, że folder Images może zawierać foldery podrzędne. W związku z tym określa, <MauiImage Include="Resources\Images\**\*" /> że wszystkie pliki w folderze Resources\Images lub foldery podrzędne folderu Images będą używane jako obrazy źródłowe, z których obrazy wymaganej rozdzielczości są generowane dla każdej platformy.

Zasoby specyficzne dla platformy zastąpią ich współużytkowanych odpowiedników zasobów. Jeśli na przykład masz obraz specyficzny dla systemu Android znajdujący się w folderze Platforms\Android\Resources\drawable-xhdpi\logo.png, a także udostępniony obraz Resources\Images\logo.svg , plik Scalable Vector Graphics (SVG) będzie używany do generowania wymaganych obrazów systemu Android, z wyjątkiem obrazu XHDPI, który już istnieje jako obraz specyficzny dla platformy.

Ikony aplikacji

Ikonę aplikacji można dodać do projektu aplikacji, przeciągając obraz do folderu Resources\AppIcon projektu, gdzie jego akcja kompilacji zostanie automatycznie ustawiona na mauiIcon. Spowoduje to utworzenie odpowiedniego wpisu w pliku projektu:

<MauiIcon Include="Resources\AppIcon\appicon.svg" />

W czasie kompilacji ikona aplikacji zostanie zmieniona na poprawne rozmiary platformy docelowej i urządzenia. Ikony aplikacji o zmienionym rozmiarze są następnie dodawane do pakietu aplikacji. Rozmiar ikon aplikacji jest zmieniany na wiele rozwiązań, ponieważ ma wiele zastosowań, w tym służy do reprezentowania aplikacji na urządzeniu i w sklepie z aplikacjami.

Aby uzyskać więcej informacji, zobacz Dodawanie ikony aplikacji do projektu aplikacji MAUI platformy .NET.

Obrazy

Obraz można dodać do projektu aplikacji, przeciągając go do folderu Resources\Images projektu, gdzie jego akcja kompilacji zostanie automatycznie ustawiona na MauiImage. Spowoduje to utworzenie odpowiedniego wpisu w pliku projektu:

<MauiImage Include="Resources\Images\logo.svg" />

W czasie kompilacji można zmienić rozmiar obrazów na poprawne rozwiązania dla platformy docelowej i urządzenia. Obrazy wynikowe są następnie dodawane do pakietu aplikacji.

Aby uzyskać więcej informacji, zobacz Dodawanie obrazów do projektu aplikacji .NET MAUI.

Czcionki

Do projektu aplikacji można dodać czcionkę typu true (TTF) lub czcionkę typu otwartego (OTF), przeciągając ją do folderu Resources\Fonts projektu, gdzie jego akcja kompilacji zostanie automatycznie ustawiona na mauiFont. Spowoduje to utworzenie odpowiedniego wpisu na czcionkę w pliku projektu:

<MauiFont Include="Resources\Fonts\OpenSans-Regular.ttf" />

W czasie kompilacji czcionki są kopiowane do pakietu aplikacji.

Aby uzyskać więcej informacji, zobacz Czcionki.

Ekran powitalny

Ekran powitalny można dodać do projektu aplikacji, przeciągając obraz do folderu Resources\Splash projektu, gdzie jego akcja kompilacji zostanie automatycznie ustawiona na ekran MauiSplashScreen. Spowoduje to utworzenie odpowiedniego wpisu w pliku projektu:

<ItemGroup>
  <MauiSplashScreen Include="Resources\Splash\splashscreen.svg" />
</ItemGroup>

W czasie kompilacji rozmiar obrazu ekranu powitalnego jest zmieniany na prawidłowy rozmiar platformy docelowej i urządzenia. Ekran powitalny o zmienionym rozmiarze zostanie dodany do pakietu aplikacji.

Aby uzyskać więcej informacji, zobacz Dodawanie ekranu powitalnego do projektu aplikacji MAUI platformy .NET.

Nieprzetworzone zasoby

Nieprzetworzonego pliku zawartości, takiego jak HTML, JSON i wideo, można dodać do projektu aplikacji, przeciągając go do folderu Resources\Raw projektu, gdzie jego akcja kompilacji zostanie automatycznie ustawiona na wartość MauiAsset. Spowoduje to utworzenie odpowiedniego wpisu dla zasobu w pliku projektu:

<MauiAsset Include="Resources\Raw\index.html" />

Zasoby pierwotne mogą być następnie używane przez kontrolki zgodnie z wymaganiami:

<WebView Source="index.html" />

W czasie kompilacji nieprzetworzone zasoby są kopiowane do pakietu aplikacji. Aby uzyskać informacje na temat wyłączania tworzenia pakietów zasobów, zobacz Wyłączanie tworzenia pakietów plików elementów zawartości.

Pliki CSS

Aplikacje .NET MAUI można częściowo stylizować przy użyciu plików kaskadowego arkusza stylów (CSS). Pliki CSS można dodawać do projektu aplikacji, przeciągając je do dowolnego folderu projektu i ustawiając akcję kompilacji na MauiCss wartość w oknie Właściwości .

Pliki CSS muszą być ładowane przez klasę StyleSheet przed dodaniu do klasy ResourceDictionary:

<Application ...>
    <Application.Resources>
        <StyleSheet Source="/Resources/styles.css" />
    </Application.Resources>
</Application>

Aby uzyskać więcej informacji, zobacz Style apps with CSS (Aplikacje stylu z arkuszem CSS).

Manifest aplikacji

Każda platforma używa własnego pliku manifestu aplikacji natywnej do określania informacji, takich jak tytuł aplikacji, identyfikator, wersja i inne. Pojedynczy projekt .NET MAUI umożliwia określenie tych typowych danych aplikacji w jednej lokalizacji w pliku projektu.

Aby określić dane manifestu udostępnionej aplikacji dla projektu, otwórz menu skrótów dla projektu w Eksplorator rozwiązań, a następnie wybierz pozycję Właściwości. Tytuł, identyfikator i wersja aplikacji można następnie określić w udostępnionej > ogólnie funkcji MAUI:

Zrzut ekranu manifestu aplikacji .NET MAUI.

W czasie kompilacji dane manifestu udostępnionej aplikacji są scalane z danymi specyficznymi dla platformy w pliku manifestu aplikacji natywnej w celu utworzenia pliku manifestu dla pakietu aplikacji. Aby uzyskać więcej informacji, zobacz Konfiguracja projektu na platformie .NET MAUI — współużytkowana usługa MAUI.

Kod specyficzny dla platformy

Projekt aplikacji .NET MAUI zawiera folder Platformy z każdym folderem podrzędnym reprezentującym platformę docelową programu .NET MAUI:

Zrzut ekranu folderów platformy.

Foldery dla każdej platformy zawierają zasoby specyficzne dla platformy i kod, który uruchamia aplikację na każdej platformie:

Zrzut ekranu kodu specyficznego dla platformy.

W czasie kompilacji system kompilacji zawiera tylko kod z każdego folderu podczas kompilowania dla tej konkretnej platformy. Na przykład podczas kompilowania dla systemu Android pliki w folderze Platformy\Android zostaną wbudowane w pakiet aplikacji, ale pliki w innych folderach Platformy nie będą. Takie podejście używa wielowersyjnego kierowania do wielu platform z jednego projektu. Wielowersyjność może być łączona z klasami częściowymi i metodami częściowymi w celu wywoływania natywnych funkcji platformy z kodu międzyplatformowego. Aby uzyskać więcej informacji, zobacz Wywoływanie kodu platformy.

Oprócz tej domyślnej metody wielowersyjnej aplikacje MAUI platformy .NET mogą być również wielokierunkowe na podstawie własnych kryteriów nazwy pliku i folderu. Umożliwia to tworzenie struktury projektu aplikacji .NET MAUI, dzięki czemu nie trzeba umieszczać kodu platformy w folderach podrzędnych folderu Platformy . Aby uzyskać więcej informacji, zobacz Konfigurowanie wielu elementów docelowych.

Wiele elementów docelowych można również połączyć z kompilacją warunkową, aby kod był przeznaczony dla określonych platform:

#if ANDROID
                  handler.NativeView.SetBackgroundColor(Colors.Red.ToNative());
#elif IOS
                  handler.NativeView.BackgroundColor = Colors.Red.ToNative();
                  handler.NativeView.BorderStyle = UIKit.UITextBorderStyle.Line;
#elif WINDOWS
                  handler.NativeView.Background = Colors.Red.ToNative();
#endif

Aby uzyskać więcej informacji na temat kompilacji warunkowej, zobacz Kompilacja warunkowa.

Punkt wejścia aplikacji

Foldery Platformy zawierają kod specyficzny dla platformy, który uruchamia aplikację na każdej platformie, ale aplikacje .NET MAUI mają jeden punkt wejścia aplikacji dla wielu platform. Każdy punkt wejścia platformy wywołuje metodę CreateMauiApp w klasie statycznej MauiProgram w projekcie aplikacji i zwraca MauiAppwartość , która jest punktem wejścia aplikacji.

Klasa MauiProgram musi co najmniej zapewnić aplikację do uruchomienia:

namespace MyMauiApp;

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>();

        return builder.Build();
    }
}  

Klasa App pochodzi z Application klasy:

namespace MyMauiApp;

public class App : Application
{
    public App()
    {
        InitializeComponent();

        MainPage = new AppShell();
    }
}

W poprzednim przykładzie MainPage właściwość jest ustawiona AppShell na obiekt . AppShell to podklasowana Shell klasa, która opisuje hierarchię wizualizacji aplikacji. Aby uzyskać więcej informacji, zobacz Tworzenie aplikacji .NET MAUI Shell.

namespace MyMauiApp;

public class App : Application
{
    public App()
    {
        InitializeComponent();
    }

    protected override Window CreateWindow(IActivationState? activationState)
    {
        return new Window(new AppShell());
    }    
}

W poprzednim przykładzie zostanie utworzony nowy Window , którego początkowa zawartość jest ustawiona AppShell na obiekt. AppShell to podklasowana Shell klasa, która opisuje hierarchię wizualizacji aplikacji. Aby uzyskać więcej informacji, zobacz Tworzenie aplikacji .NET MAUI Shell.