.NET für Android-Fehler XA4258

Beispielnachricht

error XA4258: Java name 'com.example.for' contains invalid or unsupported Java identifier 'for'. Change the package or type name.

Issue

Ein Java Paket- oder Typname enthält einen ungültigen Bezeichner, ein Java Schlüsselwort oder einen benutzerdefinierten Typbezeichner. Die Klassifizierung von Java-Bezeichnern basiert auf den Unicode-15.0-Daten von Java 21, sodass sie nicht von der zum Erstellen der App verwendeten .NET-Laufzeit abhängt.

.NET für Android erfordert Namen in der Normalisierungsform C (NFC) und lehnt Kombinations- und Formatzeichen ab, da normalisierende Dateisysteme generierte Java-Quellpfade ändern oder zusammenführen können. Ergänzende Zeichen werden abgelehnt, da das Klassenladeprogramm von Android Klassen mit zusätzlichen Zeichen in ihrem einfachen Namen nicht auflösen kann, auch wenn der genaue Deskriptor in DEX vorhanden ist.

Dies kann aus der $(ApplicationId) MSBuild-Eigenschaft, dem package-Attribut in AndroidManifest.xml, einem verwalteten Typnamen oder einem expliziten Java-Namen stammen, der durch ein Attribut wie [Register] oder [JniTypeSignature] angegeben wird.

Lösung

Verwenden Sie einen NFC-Namen. Java-Typsegmente unterstützen Java 21 BMP-Kennungsanfänge, einschließlich Währungssymbolen und Connectorinterpunktionen sowie Dezimalziffern nach dem ersten Zeichen. Paketsegmente und Android-Manifestkomponententypnamen verwenden den schmaleren Android-kompatiblen Satz von BMP-Buchstaben, Dezimalziffern nach dem ersten Zeichen, Unterstrichen und Dollarzeichen. Vermeiden Sie kombinierende, Format- und ergänzende Zeichen. Kein Segment darf ein Java-Schlüsselwort sein; auch Typnamen müssen eingeschränkte Bezeichner wie record vermeiden.

Für <activity-alias> gelten diese Einschränkungen für Typnamen für android:targetActivity, nicht für android:name. Der Aliasname ist ein beliebiger Komponentenbezeichner und verweist nicht auf eine Java Klasse.