Preparing an Application for Release (Vorbereiten einer Anwendung auf die Veröffentlichung)Preparing an Application for Release

Nachdem eine Anwendung codiert und getestet wurde, ist es erforderlich, ein Paket zur Verteilung vorzubereiten.After an application has been coded and tested, it is necessary to prepare a package for distribution. Die erste Aufgabe bei der Vorbereitung dieses Pakets liegt darin, die Anwendung für die Veröffentlichung zu erstellen, was hauptsächlich mit dem Festlegen einiger Anwendungsattribute verbunden ist.The first task in preparing this package is to build the application for release, which mainly entails setting some application attributes.

Führen Sie die folgenden Schritte aus, um die App zur Veröffentlichung zu erstellen:Use the following steps to build the app for release:

  • Angeben des Anwendungssymbols – Für jede Xamarin.Android-Anwendung muss ein Anwendungssymbol angegeben werden.Specify the Application Icon – Each Xamarin.Android application should have an application icon specified. Dies ist bei einigen Märkten wie Google Play erforderlich, obwohl keine technische Notwendigkeit besteht.Although not technically necessary, some markets, such as Google Play, require it.

  • Versionieren der Anwendung : In diesem Schritt werden die Versionsinformationen initialisiert oder aktualisiert.Version the Application – This step involves initializing or updating the versioning information. Dies ist wichtig für zukünftige Anwendungsupdates und um sicherzustellen, dass die Benutzer wissen, welche Version der Anwendung sie installiert haben.This is important for future application updates and to ensure that the users are aware of which version of the application they have installed.

  • Verkleinern des APK – Die Größe des endgültigen APKs kann mithilfe des Linkers Xamarin.Android für den verwalteten Code sowie von ProGuard für den Java-Bytecode beträchtlich verringert werden.Shrink the APK – The size of the final APK can be substantially reduced by using the Xamarin.Android linker on the managed code and ProGuard on the Java bytecode.

  • Schützen der Anwendung – Hindern Sie Benutzer oder Angreifer daran, die Anwendung zu debuggen, zu manipulieren oder zurückzuentwickeln, indem Sie Debugging deaktivieren, den verwalteten Code verbergen, Anti-Debug- und Anti-Manipulationsmaßnahmen hinzufügen und native Kompilierung verwenden.Protect the Application – Prevent users or attackers from debugging, tampering, or reverse engineering the application by disabling debugging, obfuscating the managed code, adding anti-debug and anti-tamper, and using native compilation.

  • Festlegen von Paketeigenschaften : Mit Paketeigenschaften wird die Erstellung des Android-Anwendungspakets (APK) gesteuert.Set Packaging Properties – Packaging properties control the creation of the Android application package (APK). Dieser Schritt optimiert das APK, schützt dessen Objekte und modularisiert das Paket nach Bedarf.This step optimizes the APK, protects its assets, and modularizes the packaging as needed.

  • Kompilieren – In diesem Schritt werden Code und Objekte kompiliert, um das Erstellen im Releasemodus zu bestätigen.Compile – This step compiles the code and assets to verify that it builds in Release mode.

  • Archivieren zur Veröffentlichung – In diesem Schritt wird die App erstellt und zum Signieren und Veröffentlichen in einem Archiv platziert.Archive for Publishing – This step builds the app and places it in an archive for signing and publishing.

Jeder dieser Schritte wird unten genauer beschrieben.Each of these steps is described below in more detail.

Angeben des AnwendungssymbolsSpecify the Application Icon

Es wird dringend empfohlen, für jede Xamarin.Android-Anwendung ein Anwendungssymbol festzulegen.It is strongly recommended that each Xamarin.Android application specify an application icon. Einige Anwendungs-Marktplaces werden eine Veröffentlichung einer Android-Anwendung ohne ein solches Symbol nicht genehmigen.Some application marketplaces will not allow an Android application to be published without one. Die Eigenschaft Icon für das Application-Attribut (Anwendungsattribut) wird zur Festlegung eines Anwendungssymbols für ein Xamarin.Android-Projekt verwendet.The Icon property of the Application attribute is used to specify the application icon for a Xamarin.Android project.

Geben Sie in Visual Studio 2017 und höher wie im folgenden Screenshot gezeigt das Anwendungssymbol über den Bereich Android-Manifest der Eigenschaften des Projekts an:In Visual Studio 2017 and later, specify the application icon through the Android Manifest section of project Properties, as shown in the following screenshot:

Anwendungssymbol festlegenSet the application icon

In diesen Beispielen bezieht sich @drawable/icon auf eine Symboldatei, die sich in Resources/drawable/icon.png befindet (Beachten Sie, dass die .PNG-Erweiterung nicht im Ressourcennamen enthalten ist).In these examples, @drawable/icon refers to an icon file that is located at Resources/drawable/icon.png (note that the .png extension is not included in the resource name). Das Attribut kann auch in der Datei Properties\AssemblyInfo.cs deklariert werden, wie im folgenden Beispiel gezeigt wird:This attribute can also be declared in the file Properties\AssemblyInfo.cs, as shown in this sample snippet:

[assembly: Application(Icon = "@drawable/icon")]

In der Regel wird using Android.App am oberen Rand von AssemblyInfo.cs deklariert (der Namespace des Application-Attributs ist Android.App). Dennoch müssen Sie diese using-Anweisung hinzufügen, falls sie noch nicht vorhanden ist.Normally, using Android.App is declared at the top of AssemblyInfo.cs (the namespace of the Application attribute is Android.App); however, you may need to add this using statement if it is not already present.

Versionieren der AnwendungVersion the Application

Die Versionsverwaltung ist wichtig für die Wartung und Verteilung von Android-Anwendungen.Versioning is important for Android application maintenance and distribution. Ohne die Versionsverwaltung ist es schwierig zu bestimmen, ob oder wie eine Anwendung aktualisiert werden soll.Without some sort of versioning in place, it is difficult to determine if or how an application should be updated. Um Sie bei der Versionsverwaltung zu unterstützen, erkennt Android zwei verschiedene Arten von Informationen:To assist with versioning, Android recognizes two different types of information:

  • Die Versionsnummer – Ein ganzzahliger Wert, der intern von Android und der Anwendung verwendet wird und für die Version der Anwendung steht.Version Number – An integer value (used internally by Android and the application) that represents the version of the application. In den meisten Anwendungen ist der Wert zunächst auf 1 festgelegt und wird mit jedem weiteren Build inkrementiert.Most applications start out with this value set to 1, and then it is incremented with each build. Dieser Wert steht in keiner Verbindung oder Affinität zum Attribut des Versionsnamens (siehe unten).This value has no relationship or affinity with the version name attribute (see below). Anwendungen und Veröffentlichungsdienste sollten Benutzern diesen Wert nicht anzeigen.Applications and publishing services should not display this value to users. Dieser Wert wird in der Datei AndroidManifest.xml als android:versionCode gespeichert.This value is stored in the AndroidManifest.xml file as android:versionCode.

  • Der Versionsname – Eine Zeichenfolge, deren einziger Zweck es ist, dem Benutzer Informationen zur Version der Anwendung auf einem spezifischen Gerät bereitzustellen.Version Name – A string that is used only for communicating information to the user about the version of the application (as installed on a specific device). Der Versionsname soll Benutzern angezeigt werden, z.B. in Google Play.The version name is intended to be displayed to users or in Google Play. Diese Zeichenfolge wird nicht intern von Android verwendet.This string is not used internally by Android. Der Versionsname kann jeder beliebige Zeichenfolgenwert sein, anhand dessen ein Benutzer den Build bestimmen kann, der auf seinem Gerät installiert ist.The version name can be any string value that would help a user identify the build that is installed on their device. Dieser Wert wird in der Datei AndroidManifest.xml als android:versionName gespeichert.This value is stored in the AndroidManifest.xml file as android:versionName.

In Visual Studio können diese Werte wie im folgenden Screenshot gezeigt über den Bereich Android-Manifest der Eigenschaften des Projekts festgelegt werden:In Visual Studio, these values can be set in the Android Manifest section of project Properties, as shown in the following screenshot:

Versionsnummer festlegenSet the version number

Verkleinern der APKShrink the APK

Xamarin.Android-APKs können durch eine Kombination des Linkers Xamarin.Android zum Entfernen von unnötigem verwalteten Code sowie des Tools ProGuard aus dem Android SDK zum Entfernen von nicht verwendetem Java-Bytecode verkleinert werden.Xamarin.Android APKs can be made smaller through a combination of the Xamarin.Android linker, which removes unnecessary managed code, and the ProGuard tool from the Android SDK, which removes unused Java bytecode. Vom Erstellungsprozess wird zuerst der Linker Xamarin.Android zum Optimieren der App auf Ebene des verwalteten Codes (C#) und anschließend ProGuard (sofern aktiviert) zum Optimieren der APK auf Java-Bytecode-Ebene verwendet.The build process first uses the Xamarin.Android linker to optimize the app at the managed code (C#) level, and then it later uses ProGuard (if enabled) to optimize the APK at the Java bytecode level.

Konfigurieren des LinkersConfigure the Linker

Der Releasemodus deaktiviert die freigegebene Laufzeit und aktiviert die Verknüpfung, sodass die Anwendung nur die Teile von Xamarin.Android enthält, die zur Laufzeit erforderlich sind.Release mode turns off the shared runtime and turns on linking so that the application only ships the pieces of Xamarin.Android required at runtime. Der Linker in Xamarin.Android bestimmt mithilfe von statischen Analysen, welche Assemblys, Typen und Typmember von einer Xamarin.Android-Anwendung verwendet oder referenziert werden.The linker in Xamarin.Android uses static analysis to determine which assemblies, types, and type members are used or referenced by a Xamarin.Android application. Anschließend verwirft der Linker alle ungenutzten Assemblys, Typen und Member, die nicht verwendet (oder referenziert) werden.The linker then discards all the unused assemblies, types, and members that are not used (or referenced). Dies kann zu einer erheblichen Verringerung der Paketgröße führen.This can result in a significant reduction in the package size. Betrachten Sie beispielsweise das HalloWelt-Beispiel, bei dem sich die endgültige Größe des zugehörigen Android-Anwendungspakets um 83% verringert:For example, consider the HelloWorld sample, which experiences an 83% reduction in the final size of its APK:

  • Konfiguration: Keine – Xamarin.Android 4.2.5 Größe = 17,4 MB.Configuration: None – Xamarin.Android 4.2.5 Size = 17.4 MB.

  • Konfiguration: Nur SDK-Assemblys – Xamarin.Android 4.2.5 Größe = 3,0 MB.Configuration: SDK Assemblies Only – Xamarin.Android 4.2.5 Size = 3.0 MB.

Legen Sie die Optionen des Linkers über den Bereich Android-Optionen der Eigenschaften des Projekts fest:Set linker options through the Android Options section of the project Properties:

LinkeroptionenLinker options

Das Pulldownmenü Verknüpfen enthält die folgenden Optionen zum Steuern des Linkers:The Linking pull-down menu provides the following options for controlling the linker:

  • Keine – Der Linker wird deaktiviert, und es erfolgt keine Verknüpfung.None – This turns off the linker; no linking will be performed.

  • Nur SDK-Assemblys: Es werden nur die Assemblys verknüpft, die von Xamarin.Android benötigt werden.SDK Assemblies Only – This will only link the assemblies that are required by Xamarin.Android. Andere Assemblys werden nicht verknüpft.Other assemblies will not be linked.

  • SDK und Benutzerassemblys – Es werden alle Assemblys verknüpft, die von der Anwendung benötigt werden, nicht nur diejenigen, die von Xamarin.Android benötigt werden.Sdk and User Assemblies – This will link all assemblies that are required by the application, and not just the ones required by Xamarin.Android.

Durch das Verknüpfen können unerwartete Nebenwirkungen auftreten, daher ist es wichtig, dass eine Anwendung im Releasemodus auf einem physischen Gerät erneut getestet wird.Linking can produce some unintended side effects, so it is important that an application be re-tested in Release mode on a physical device.

ProGuardProGuard

ProGuard ist ein Android SDK-Tool, das Java-Code verknüpft und verschleiert.ProGuard is an Android SDK tool that links and obfuscates Java code. ProGuard wird normalerweise verwendet, um kleinere Anwendungen zu erstellen, indem der Speicherbedarf für große enthaltene Bibliotheken (wie Google Play Services) in Ihrem APK reduziert wird.ProGuard is normally used to create smaller applications by reducing the footprint of large included libraries (such as Google Play Services) in your APK. ProGuard entfernt nicht verwendeten Java-Bytecode, wodurch die resultierende App kleiner wird.ProGuard removes unused Java bytecode, which makes the resulting app smaller. Beispielsweise wird durch die Verwendung von ProGuard bei kleinen Xamarin.Android-Apps für gewöhnlich eine Größenreduzierung um etwa 24 % erzielt – bei größeren Apps mit mehreren Bibliotheksabhängigkeiten wird die Größe durch die Verwendung von ProGuard sogar noch weiter reduziert.For example, using ProGuard on small Xamarin.Android apps usually achieves about a 24% reduction in size – using ProGuard on larger apps with multiple library dependencies typically achieves an even greater size reduction.

ProGuard ist keine Alternative zum Xamarin.Android-Linker.ProGuard is not an alternative to the Xamarin.Android linker. Der Xamarin.Android-Linker verknüpft verwalteten Code, während ProGuard Java-Bytecode verknüpft.The Xamarin.Android linker links managed code, while ProGuard links Java bytecode. Der Buildprozess verwendet zunächst den Xamarin.Android-Linker, um den verwalteten (C#) Code in der App zu optimieren. Anschließend nutzt er ProGuard (wenn es aktiviert ist), um das APK auf der Java-Bytecode-Ebene zu optimieren.The build process first uses the Xamarin.Android linker to optimize the managed (C#) code in the app, and then it later uses ProGuard (if enabled) to optimize the APK at the Java bytecode level.

Wenn Enable ProGuard (ProGuard aktivieren) ausgewählt ist, führt Xamarin.Android das ProGuard-Tool auf dem resultierenden APK aus.When Enable ProGuard is checked, Xamarin.Android runs the ProGuard tool on the resulting APK. Eine ProGuard-Konfigurationsdatei wird generiert und von ProGuard bei der Erstellung verwendet.A ProGuard configuration file is generated and used by ProGuard at build time. Xamarin.Android unterstützt außerdem benutzerdefinierte ProguardConfiguration-Buildvorgänge.Xamarin.Android also supports custom ProguardConfiguration build actions. Sie können Ihrem Projekt eine benutzerdefinierte ProGuard-Konfigurationsdatei hinzufügen, mit der rechten Maustaste darauf klicken und sie als einen Buildvorgang auswählen, wie im folgenden Beispiel gezeigt wird:You can add a custom ProGuard configuration file to your project, right-click it, and select it as a build action as shown in this example:

ProGuard ist standardmäßig deaktiviert.ProGuard is disabled by default. Die Option ProGuard aktivieren ist nur dann verfügbar, wenn sich das Projekt im Modus Release befindet.The Enable ProGuard option is available only when the project is set to Release mode. Alle Buildaktionen von ProGuard werden ignoriert, wenn ProGuard deaktiviert ist.All ProGuard build actions are ignored unless Enable ProGuard is checked. Die ProGuard-Konfiguration „Xamarin.Android“ verschleiert das APK nicht. Zudem ist es nicht möglich, die Obfuskation zu aktivieren, auch nicht mit benutzerdefinierten Konfigurationsdateien.The Xamarin.Android ProGuard configuration does not obfuscate the APK, and it is not possible to enable obfuscation, even with custom configuration files. Wenn Sie von der Obfuskation Gebrauch machen möchten, finden Sie unter Application Protection with Dotfuscator (Anwendungsschutz mit Dotfuscator) mehr Informationen.If you wish to use obfuscation, please see Application Protection with Dotfuscator.

Ausführlichere Informationen zur Verwendung des ProGuard-Tools finden Sie unter ProGuard.For more detailed information about using the ProGuard tool, see ProGuard.

Schützen der AnwendungProtect the Application

Deaktivieren des DebuggensDisable Debugging

Während der Entwicklung einer Android-Anwendung wird das Debuggen mit dem Java Debug Wire Protocol (JDWP) ausgeführt.During development of an Android application, debugging is performed with the use of the Java Debug Wire Protocol (JDWP). Dies ist eine Technologie, die es Tools wie adb ermöglicht, für das Debuggen mit einer JVM zu kommunizieren.This is a technology that allows tools such as adb to communicate with a JVM for the purposes of debugging. JDWP ist für die Debugbuilds einer Xamarin.Android-Anwendung standardmäßig aktiviert.JDWP is turned on by default for Debug builds of a Xamarin.Android application. Obwohl JDWP während der Entwicklung wichtig ist, kann es ein Sicherheitsproblem für freigegebene Anwendungen darstellen.While JDWP is important during development, it can pose a security issue for released applications.

Wichtig

Deaktivieren Sie den Debugzustand in einer freigegebenen Anwendung nach Möglichkeit immer (über JDWP), um vollständigen Zugriff auf den Java-Prozess zu erhalten und beliebigen Code im Kontext der Anwendung auszuführen, wenn der Debugzustand nicht deaktiviert ist.Always disable the debug state in a released application as it is possible (via JDWP) to gain full access to the Java process and execute arbitrary code in the context of the application if this debug state is not disabled.

Das Android-Manifest enthält das android:debuggable-Attribut, das steuert, ob die Anwendung gedebuggt werden kann oder nicht.The Android Manifest contains the android:debuggable attribute, which controls whether or not the application may be debugged. Es wird empfohlen, das android:debuggable-Attribut auf false festzulegen.It is considered a good practice to set the android:debuggable attribute to false. Der einfachste Weg ist das Hinzufügen einer bedingten Kompilierungsanweisung in AssemblyInfo.cs:The simplest way to do this is by adding a conditional compile statement in AssemblyInfo.cs:

#if DEBUG
[assembly: Application(Debuggable=true)]
#else
[assembly: Application(Debuggable=false)]
#endif

Beachten Sie, dass Debugbuilds automatisch manche Berechtigungen festlegen, um das Debuggen zu erleichtern (z.B. Internet und ReadExternalStorage).Note that Debug builds automatically set some permissions to make debug easier (such as Internet and ReadExternalStorage). Releasebuilds verwenden jedoch nur die Berechtigungen, die sie explizit konfigurieren.Release builds, however, use only the permissions that you explicitly configure. Wenn Sie feststellen, dass Ihre App durch den Wechsel zum Releasebuild eine Berechtigung verliert, die im Debugbuild verfügbar war, überprüfen Sie, dass Sie diese Berechtigung wie in Berechtigungen beschrieben explizit in der Liste Erforderliche Berechtigungen aktiviert haben.If you find that switching to the Release build causes your app to lose a permission that was available in the Debug build, verify that you have explicitly enabled this permission in the Required permissions list as described in Permissions.

Schützen der Anwendung mit DotfuscatorApplication Protection with Dotfuscator

Auch mit der Einstellung Debugging deaktiviert ist es möglich, dass Angreifer Anwendungen erneut verpacken oder Konfigurationsoptionen bzw. -berechtigungen hinzufügen oder entfernen.Even with debugging disabled, it is still possible for attackers to re-package an application, adding or removing configuration options or permissions. Auf diese Weise können sie Anwendungen zurückentwickeln, debuggen oder manipulieren.This allows them to reverse-engineer, debug, or tamper with the application. Sie können Dotfuscator Community Edition (CE) verwenden, um verwalteten Code zu verbergen und Laufzeitcode zur Erkennung des Sicherheitsstatus zur Buildzeit in eine Xamarin.Android-App einzufügen, um zu entdecken, ob die App auf einem Gerät mit entfernten Nutzungsbeschränkungen ausgeführt wird und darauf zu antworten.Dotfuscator Community Edition (CE) can be used to obfuscate managed code and inject runtime security state detection code into a Xamarin.Android app at build time to detect and respond if the app is running on a rooted device.

Dotfuscator CE ist in Visual Studio 2017 enthalten.Dotfuscator CE is included with Visual Studio 2017. Wenn Sie Dotfuscator verwenden möchten, klicken Sie auf Tools > Präemptiver Schutz - Dotfuscator.To use Dotfuscator, click Tools > PreEmptive Protection - Dotfuscator.

Informationen zum Konfigurieren von Dotfuscator CE finden Sie unter Using Dotfuscator Community Edition with Xamarin (Verwenden von Dotfuscator Community Edition mit Xamarin).To configure Dotfuscator CE, please see Using Dotfuscator Community Edition with Xamarin. Nach der Konfiguration schützt Dotfuscator CE automatisch jeden erstellten Build.Once it is configured, Dotfuscator CE will automatically protect each build that is created.

Bündeln von Assemblys in nativem CodeBundle Assemblies into Native Code

Wenn diese Option aktiviert ist, werden Assemblys in einer nativen freigegebenen Bibliothek gebündelt.When this option is enabled, assemblies are bundled into a native shared library. Durch diese Option bleibt der Code sicher. Sie schützt verwaltete Assemblys, indem sie diese in native Binärdateien einbettet.This option keeps the code safe; it protects managed assemblies by embedding them in native binaries.

Diese Option erfordert eine Unternehmenslizenz und ist nur verfügbar, wenn Fast Deployment verwenden deaktiviert ist.This option requires an Enterprise license and is only available when Use Fast Deployment is disabled. Assemblys in nativem Code bündeln ist standardmäßig deaktiviert.Bundle assemblies into native code is disabled by default.

Beachten Sie, dass die Option Assemblys in nativem Code bündeln nicht bedeutet, dass die Assemblys in nativen Code kompiliert werden.Note that the Bundle into Native Code option does not mean that the assemblies are compiled into native code. Es ist nicht möglich, die AOT-Kompilierung zu verwenden, um Assemblys in nativen Code zu kompilieren (derzeit nur eine experimentelle Funktion und nicht für die Verwendung in der Produktion geeignet).It is not possible to use AOT Compilation to compile assemblies into native code (currently only an experimental feature, and not for production use).

AOT-KompilierungAOT Compilation

Die Option AOT Kompilierung (unter Packaging Properties (Paketeigenschaften)) aktiviert die Ahead-of-Time-Kompilierung von Assemblys.The AOT Compilation option (on the Packaging Properties page) enables Ahead-of-Time (AOT) compilation of assemblies. Wenn diese Option aktiviert ist, wird der Mehraufwand eines Just-In-Time-Starts minimiert, indem Assemblys vor dem Ausführen vorkompiliert werden.When this option is enabled, Just In Time (JIT) startup overhead is minimized by precompiling assemblies before runtime. Der native Code, der sich daraus ergibt, ist genauso wie die nicht kompilierten Assemblys im APK enthalten.The resulting native code is included in the APK along with the uncompiled assemblies. Dadurch wird zwar einerseits die Startzeit verringert, andererseits sind jedoch die APK etwas größer.This results in shorter application startup time, but at the expense of slightly larger APK sizes.

Um die Option AOT-Kompilierung ausführen zu können, müssen Sie mindestens über eine Enterprise-Lizenz verfügen.The AOT Compilation option requires an Enterprise license or higher. Die AOT Kompilierung ist nur verfügbar, wenn das Projekt für den Releasemodus konfiguriert ist. Sie ist standardmäßig deaktiviert.AOT compilation is available only when the project is configured for Release mode, and it is disabled by default. Weitere Informationen über die AOT-Kompilierung finden Sie unter AOT.For more information about AOT Compilation, see AOT.

LLVM-OptimierungscompilerLLVM Optimizing Compiler

Der LLVM-Optimierungscompiler erstellt kürzeren und schneller kompilierbaren Code und konvertiert AOT-kompatible Assemblys in nativen Code. Dies führt jedoch zu erhöhten Buildzeiten.The LLVM Optimizing Compiler will create smaller and faster compiled code and convert AOT-compiled assemblies into native code, but at the expense of slower build times. Der LLVM-Compiler ist standardmäßig deaktiviert.The LLVM compiler is disabled by default. Um den LLVM-Compiler nutzen zu können, muss zunächst auf der Seite Verpackungseigenschaften die Option AOT-Kompilierung aktiviert werden.To use the LLVM compiler, the AOT Compilation option must first be enabled (on the Packaging Properties page).

Hinweis

Für die Option LLVM-Optimierungscompiler ist eine Enterprise-Lizenz erforderlich.The LLVM Optimizing Compiler option requires an Enterprise license.

Festlegen von PaketeigenschaftenSet Packaging Properties

Paketeigenschaften können über den Bereich Android-Optionen der Eigenschaften des Projekts festgelegt werden wie im folgenden Screenshot gezeigt:Packaging properties can be set in the Android Options section of project Properties, as shown in the following screenshot:

PaketeigenschaftenPackaging Properties

Viele dieser Eigenschaften, wie Shared Runtime verwenden und Fast Deployment verwenden, sind für den Debugmodus konzipiert.Many of these properties, such as Use Shared Runtime, and Use Fast Deployment are intended for Debug mode. Wenn die Anwendung jedoch für den Releasemodus konfiguriert ist, bestimmen andere Einstellungen, wie die App für Größe und Ausführungsgeschwindigkeit optimiert wird, wie sie vor Manipulationen geschützt wird und wie sie verpackt werden kann, damit verschiedene Architekturen und Größeneinschränkungen unterstützt werden.However, when the application is configured for Release mode, there are other settings that determine how the app is optimized for size and execution speed, how it is protected from tampering, and how it can be packaged to support different architectures and size restrictions.

Angeben unterstützter ArchitekturenSpecify Supported Architectures

Wenn Sie eine Xamarin.Android-App auf die Veröffentlichung vorbereiten, müssen Sie unbedingt die unterstützten CPU-Architekturen angeben.When preparing a Xamarin.Android app for release, it is necessary to specify the CPU architectures that are supported. Ein einzelnes APK kann Computercode enthalten, der mehrere unterschiedliche Architekturen unterstützt.A single APK can contain machine code to support multiple, different architectures. Weitere Angaben zur Unterstützung mehrere CPU-Architekturen finden Sie unter CPU-Architekturen.See CPU Architectures for details about supporting multiple CPU architectures.

Generieren eines Pakets (.APK) pro ausgewählter ABIGenerate One Package (.APK) per Selected ABI

Wenn diese Option aktiviert ist, wird ein APK für jede der unterstützten ABIs erstellt (wird in der Erweitert-Registerkarte ausgewählt, wie in CPU Architectures (CPU-Architekturen) beschrieben), anstatt eines einzigen, großen APK für alle unterstützten ABIs.When this option is enabled, one APK will be created for each of the supported ABI's (selected on the Advanced tab, as described in CPU Architectures) rather than a single, large APK for all supported ABI's. Diese Option steht nur zur Verfügung, wenn das Projekt für den Releasemodus konfiguriert ist, und sie ist standardmäßig deaktiviert.This option is available only when the project is configured for Release mode, and it is disabled by default.

Multi-DexMulti-Dex

Wenn die Option Multi-Dex aktivieren aktiviert ist, werden die Android SDK Tools dazu verwendet, das 65K-Limit für Methoden des Dateiformats .dex zu umgehen.When the Enable Multi-Dex option is enabled, Android SDK tools are used to bypass the 65K method limit of the .dex file format. Das 65K-Limit für Methoden basiert auf der Anzahl von Java-Methoden, auf die eine App verweist (einschließlich derer in Bibliotheken, von denen die App abhängt) – es hängt nicht von der Anzahl von Methoden ab, die im Quellcode geschrieben sind.The 65K method limitation is based on the number of Java methods that an app references (including those in any libraries that the app depends on) – it is not based on the number of methods that are written in the source code. Wenn eine Anwendung nur wenige Methoden definiert, jedoch viele (oder große Bibliotheken) verwendet, ist es möglich, dass das 65K-Limit erweitert wird.If an application only defines a few methods but uses many (or large libraries), it is possible that the 65K limit will be exceeded.

Es ist möglich, dass eine App nicht jede Methode in jeder Bibliothek verwendet, auf die verwiesen wird. Daher ist es möglich, dass ein Tool wie ProGuard (siehe oben) die nicht verwendeten Methoden aus dem Code entfernen kann.It is possible that an app is not using every method in every library that is referenced; therefore, it is possible that a tool such as ProGuard (see above) can remove the unused methods from code. Die bewährte Methode ist, die Option Multi-Dex aktivieren nur zu aktivieren, wenn dies unbedingt notwendig ist. D.h., dass die App selbst nach der Verwendung von ProGuard noch auf mehr als 65K Java-Methoden verweist.The best practice is to enable Enable Multi-Dex only if absolutely necessary, i.e.the app still references more than 65K Java methods even after using ProGuard.

Weitere Informationen zu Multi-Dex finden Sie unter Configure Apps with Over 64K Methods (Konfigurieren von Apps, die mehr als 65535 Methoden enthalten).For more information about Multi-Dex, see Configure Apps with Over 64K Methods.

CompileCompile

Nachdem alle oben genannten Schritte abgeschlossen wurden, ist die App bereit zur Kompilierung.After all of the above steps are completed, the app is ready for compilation. Wählen Sie Erstellen > Projektmappe neu erstellen aus, damit sie erfolgreich im Releasemodus erstellt wird.Select Build > Rebuild Solution to verify that it builds successfully in Release mode. Beachten Sie, dass in diesem Schritt noch kein APK erstellt wird.Note that this step does not yet produce an APK.

Unter Signing the App Package (Signieren des App-Pakets) werden der Packvorgang und die Anmeldung detaillierter beschrieben.Signing the App Package discusses packaging and signing in more detail.

Archivieren zur VeröffentlichungArchive for Publishing

Klicken Sie mit der rechten Maustaste auf das Projekt im Projektmappen-Explorer, und wählen Sie das Kontextmenüelement Archiv ... aus, um mit der Veröffentlichung zu beginnen:To begin the publishing process, right-click the project in Solution Explorer and select the Archive... context menu item:

Archiv-AppArchive app

Mit Archiv... wird der Archiv-Manager geöffnet und der Archivierungsprozess der App-Bündel gestartet wie in diesem Screenshot gezeigt:Archive... launches the Archive Manager and begins the process of archiving the App bundle as shown in this screenshot:

Archiv-ManagerArchive Manager

Eine andere Möglichkeit, ein Archiv zu erstellen, besteht darin, mit der rechten Maustaste auf die Projektmappe im Projektmappen-Explorer zu klicken und Alle archivieren... auszuwählen. Dadurch wird die Projektmappe erstellt, und alle Xamarin-Projekte, aus denen ein Archiv generiert werden kann, werden archiviert:Another way to create an archive is to right-click the Solution in the Solution Explorer and select Archive All..., which builds the solution and archives all Xamarin projects that can generate an archive:

Alle archivierenArchive All

Sowohl mit Archivieren als auch mit Alle archivieren wird der Archiv-Manager automatisch geöffnet.Both Archive and Archive All automatically launch the Archive Manager. Zum direkten Starten des Archiv-Managers klicken Sie auf das Menüelement Tools > Archiv-Manager ... :To launch the Archive Manager directly, click the Tools > Archive Manager... menu item:

Archiv-Manager startenLaunch Archive Manager

Sie können die Archive der Projektmappen jederzeit ansehen, indem Sie mit der rechten Maustaste auf den Knoten Projektmappe klicken und Archivansicht auswählen:The solution's archives at any time by right clicking the Solution node and selecting View Archives:

ArchivansichtView Archives

Der Archiv-ManagerThe Archive Manager

Der Archiv-Manager besteht aus den Bereichen Projektmappenliste, Archivliste und Details:The Archive Manager is comprised of a Solution List pane, an Archives List, and a Details Panel:

Archiv-Manager-BereicheArchive Manager Panes

In der Projektmappenliste werden alle Projektmappen mit mindestens einem archivierten Projekt angezeigt.The Solution List displays all solutions having at least one archived project. Die Projektmappenliste enthält die folgenden Bereiche:The Solution List includes the following sections:

  • Aktuelle Projektmappe: Die aktuelle Projektmappe wird angezeigt.Current Solution – Displays the current solution. Beachten Sie, dass dieser Bereich möglicherweise leer ist, wenn die aktuelle Projektmappe kein vorhandenes Archiv aufweist.Note that this area may be empty if the current solution does not have an existing archive.
  • Alle Projektmappen: Es werden alle Projektmappen angezeigt, die ein Archiv aufweisen.All Archives – Displays all solutions that have an archive.
  • Suchen Textfeld (oben): Die in der Liste Alle Projektmappen aufgeführten Projektmappen werden entsprechend der Suchzeichenfolge gefiltert, die in das Textfeld eingegeben wurde.Search text box (at the top) – Filters the solutions listed in the All Archives list according to the search string entered in the text box.

In der Archivliste werden alle Archive der ausgewählten Projektmappe angezeigt.The Archives List displays the list of all archives for the selected solution. Die Archivliste enthält die folgenden Bereiche:The Archives List includes the following sections:

  • Name der ausgewählten Projektmappe: Es wird der Name der Projektmappe angezeigt, die in der Projektmappenliste ausgewählt wurde.Selected solution name – Displays the name of the solution selected in the Solution List. Alle Informationen in der Archivliste beziehen sich auf diese ausgewählte Projektmappe.All information shown in the Archives List refers to this selected solution.
  • Plattformfilter: In diesem Feld können Archive nach Plattformtyp (z.B. iOS oder Android) gefiltert werden.Platforms Filter – This field makes it possible to filter archives by platform type (such as iOS or Android).
  • Elemente archivieren: Es wird eine Liste der Archive der ausgewählten Projektmappe angezeigt.Archive Items – List of archives for the selected solution. Jedes Element in dieser Liste enthält Projektnamen, Erstellungsdatum und Plattform.Each item in this list includes the project name, creation date, and platform. Es können auch zusätzliche Informationen wie der Fortschritt beim Archivieren oder Veröffentlichen eines Elements angezeigt werden.It can also show additional information such as the progress when an item is being archived or published.

Im Bereich „Details“ werden zusätzliche Informationen zu jedem Archiv angezeigt.The Details Panel displays additional information about each archive. Hier können Benutzer auch den Workflow für die Verteilung starten oder den Ordner öffnen, in dem die Verteilung erstellt wurde.It also allows the user to start the Distribution workflow or open the folder where the distribution has been created. Im Bereich Kommentare erstellen können Build-Kommentare in das Archiv eingeschlossen werden.The Build Comments section makes it possible to include build comments in the archive.

VerteilungDistribution

Wenn eine archivierte Version der Anwendung zur Veröffentlichung bereit ist, wählen Sie das Archiv im Archiv-Manager aus und klicken auf die Schaltfläche Verteilen... :When an archived version of the application is ready to publish, select the archive in the Archive Manager and click the Distribute... button:

Schaltfläche „Verteilen“Distribute button

Im Dialogfeld Vertriebskanal werden Informationen zur App, zum Fortschritt des Verteilungs-Workflows sowie eine Vertriebskanal-Auswahl angezeigt.The Distribution Channel dialog shows information about the app, an indication of distribution workflow progress, and a choice of distribution channels. Beim ersten Ausführen werden zwei Optionen angezeigt:On the first run, two choices are presented:

Vertriebskanal auswählenSelect Distribution Channel

Es kann einer der folgenden Vertriebskanäle ausgewählt werden:It is possible to choose one of the following distribution channels:

  • Ad-Hoc: Es wird ein signiertes APK auf dem Datenträger gespeichert, das auf Android-Geräte quergeladen werden kann.Ad-Hoc – Saves a signed APK to disk that can be sideloaded to Android devices. Fahren Sie mit dem Artikel Signing the App Package (Signieren des App-Pakets) fort, um zu erfahren, wie eine Android-Signierungsidentität und ein neues Signaturzertifikat für Android-Anwendungen erstellt und eine Ad-Hoc-Version der App auf dem Datenträger veröffentlicht werden kann.Continue to Signing the App Package to learn how to create an Android signing identity, create a new signing certificate for Android applications, and publish an ad hoc version of the app to disk. Dies ist eine gute Möglichkeit, ein APK für Testzwecke zu erstellen.This is a good way to create an APK for testing.

  • Google Play: veröffentlicht ein signiertes APK bei Google Play.Google Play – Publishes a signed APK to Google Play. Fahren Sie mit dem Artikel Publishing to Google Play (Veröffentlichen in Google Play) fort, um zu erfahren, wie Sie ein APK im Google Play Store signieren und veröffentlichen können.Continue to Publishing to Google Play to learn how to sign and publish an APK in the Google Play store.