Wie man die VersionCode-Beschränkung von Xamarin.Android umgeht
Erfahre, warum dein Xamarin.Android-Build mit "Error executing task Aapt: VersionCode is outside 0, 65535 interval" fehlschlägt und wie du dieses Problem umgehen kannst.
Erfahre, warum dein Xamarin.Android-Build mit "Error executing task Aapt: VersionCode is outside 0, 65535 interval" fehlschlägt und wie du dieses Problem umgehen kannst.
Als wir zum ersten Mal von diesem Problem hörten, haben wir uns gefragt, wie so etwas überhaupt passieren kann. Wir haben uns den Build-Prozess angesehen und auf den ersten Blick nichts Auffälliges gefunden. Der Build zählt die Build-Nummer hoch und setzt diese dann als VersionCode. Genau solche Stolpersteine begegnen uns regelmäßig in der Android App Entwicklung und in Projekten, die auf eine plattformübergreifende App mit gemeinsamer Codebasis setzen.
Trotzdem gibt es Konfigurationen, mit denen man genau in dieses Problem laufen kann. Ein Beispiel ist die Verwendung des vollständigen Build-Datums als VersionCode. Solche Setups haben wir tatsächlich gesehen. Grundsätzlich ist das kein Problem, weil der maximale Wert eines Integers groß genug ist. Google Play akzeptiert laut Dokumentation VersionCodes bis zu 2.100.000.000.
Auf der Suche nach einer Lösung bin ich auf diese Frage in den Xamarin-Foren gestoßen sowie auf das Bug-Ticket 51620, das inzwischen durch die Umstellung von Bugzilla auf GitHub nicht mehr erreichbar ist. Beide Quellen empfahlen, die Option Generate one package (.apk) per selected ABI in den Android-Build-Einstellungen zu deaktivieren.

Diese vorgeschlagene Lösung funktioniert. Sie kann aber abhängig von den im Reiter Advanced ausgewählten ABIs zu einer unnötig aufgeblähten APK führen. Wenn du weiterhin getrennte ABI-Pakete an Google Play verteilen möchtest, brauchst du einen anderen Weg.
Wenn du nicht wie dieser Entwickler auf Stack Overflow enden möchtest, folge diesen Schritten, um den VersionCode nach dem Build deiner Xamarin.Android-APK anzupassen.
0 und 65000.apktool d $APK_PATH -o $OUTPUT_FOLDER aus.apktool.yml und passe dort die Einträge für versionCode an.apktool build $OUTPUT_FOLDER erneut.jarsigner -verbose -keystore $KEYSTORE_PATH -storepass $KEYSTORE_PASSWORD -keypass $KEYSTORE_KEY_PASSWORD $APK_PATH $KEYSTORE_KEY_NAME ~/android-sdk/build-tools/25.0.2/zipalign -v 4 $APK_PATH $APK_OUT_PATH
Eine kurze Erinnerung noch: Wenn du ABI-spezifische APKs erzeugst, solltest du dir auch die Xamarin-Dokumentation dazu ansehen, wie VersionCodes für solche APKs aufgebaut werden sollten.
Das Problem tritt auf, wenn Xamarin.Android intern an eine Begrenzung stößt und der erzeugte VersionCode außerhalb des zulässigen Bereichs für den Build-Prozess liegt. Ein typischer Auslöser ist ein zu großer automatisch erzeugter Wert.
Eine Möglichkeit ist, die Option zum Erzeugen separater APKs pro ABI zu deaktivieren. Wenn das nicht gewünscht ist, kann der VersionCode nachträglich mit apktool angepasst und die APK anschließend neu signiert werden.
Google Play akzeptiert deutlich höhere VersionCodes als Xamarin.Android intern in diesem Szenario verarbeiten konnte. Deshalb kann der Fehler auftreten, obwohl der Wert für Google Play grundsätzlich noch zulässig wäre.
Bluetooth Low Energy mit .NET MAUI: Dieser Artikel zeigt, wie sich BLE-fähige Geräte plattformübergreifend für Android und iOS ansprechen lassen. Als Praxisbeispiel dient der LEGO Porsche GT4 e-Performance mit dem offiziellen LEGO Wireless Protocol, inklusive Hub-Service, Port-Erkennung und Motorsteuerung.
Kartenfunktionen sind im mobilen Bereich ein wichtiges Feature. Kaum eine App gewinnt nicht an Wert, wenn sie Karten darstellen kann. Apple und Google machen mit ihren Map-SDKs vieles richtig, aber manchmal stößt man an Grenzen - sei es aus rechtlichen Gründen oder wegen eines Bugs. In meinem Fall war Letzteres der Auslöser. Ich brauchte außerdem eine Alternative, die auch offline funktioniert.
Lerne in 5 einfachen Schritten, wie Bluetooth und das External Accessory Framework zusammenspielen, um ein BeeWi-Auto mit Xamarin.iOS zu steuern.