.NET dla błędu systemu Android XA4258

Przykładowy komunikat

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

Issue

Nazwa pakietu lub typu Java zawiera nieprawidłowy identyfikator, słowo kluczowe Java lub identyfikator typu z ograniczeniami. Klasyfikacja identyfikatorów w Javie opiera się na danych Unicode 15.0 z Javy 21, więc nie zależy od środowiska uruchomieniowego .NET używanego do kompilacji aplikacji.

.NET dla systemu Android wymaga nazw formularzy normalizacji C (NFC) i odrzuca łączenie i formatowanie znaków, ponieważ normalizacja systemów plików może zmieniać lub scalać wygenerowane ścieżki źródłowe Java. Znaki dodatkowe są odrzucane, ponieważ moduł ładujący klasy systemu Android nie może rozpoznać klas z dodatkowymi znakami w ich prostej nazwie, nawet jeśli dokładny deskryptor jest obecny w DEX.

Może to pochodzić z właściwości MSBuild $(ApplicationId), atrybutu package w AndroidManifest.xml, nazwy typu zarządzanego lub jawnej nazwy w języku Java określonej przez atrybut, taki jak [Register] lub [JniTypeSignature].

Rozwiązanie

Użyj nazwy NFC. Segmenty typów w Javie obsługują znaki BMP dozwolone na początku identyfikatora w Javie 21, w tym symbole walut i znaki interpunkcyjne łączące, a po pierwszym znaku także cyfry dziesiętne. Segmenty pakietów i nazwy typów komponentów manifestu Androida używają węższego, zgodnego z Androidem zestawu liter BMP, cyfr dziesiętnych występujących po pierwszym znaku, znaków podkreślenia i znaków dolara. Unikaj łączenia, formatowania i dodatkowych znaków. Żaden segment nie może być słowem kluczowym Java; nazwy typów muszą również unikać identyfikatorów ograniczonych, takich jak record.

W przypadku <activity-alias> te ograniczenia dotyczące nazw typów mają zastosowanie do android:targetActivity, a nie do android:name. Nazwa aliasu jest dowolnym identyfikatorem składnika i nie odwołuje się do klasy Java.