Android için .NET hatası XA4258

Örnek ileti

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

Issue

Java paketi veya tür adı geçersiz tanımlayıcı, Java anahtar sözcüğü veya kısıtlanmış tür tanımlayıcısı içeriyor. Java tanımlayıcı sınıflandırması Java 21'in Unicode 15.0 verilerini izler, bu nedenle uygulamayı derlemek için kullanılan .NET çalışma zamanına göre değişiklik göstermez.

Android için .NET, Normalization Form C (NFC) adlarını gerektirir ve birleştirme ile biçimlendirme karakterlerini reddeder; çünkü dosya sistemlerinin normalleştirilmesi, oluşturulan Java kaynak yollarını değiştirebilir veya birleştirebilir. Tam tanımlayıcı DEX'te mevcut olsa bile, Android'in sınıf yükleyicisi basit adlarında tamamlayıcı karakterler içeren sınıfları çözümleyemediğinden ek karakterler reddedilir.

Bu, AndroidManifest.xml MSBuild özelliğinden, package içindeki $(ApplicationId) özniteliğinden, yönetilen bir tür adından veya [JniTypeSignature] ya da [Register] gibi bir öznitelikle sağlanan açık bir Java adından kaynaklanabilir.

Çözüm

NFC adı kullanın. Java tür segmentleri, para birimi simgeleri ve bağlayıcı noktalama işaretleri dahil olmak üzere Java 21 BMP tanımlayıcı başlangıçlarını ve ayrıca ilk karakterden sonra ondalık rakamları destekler. Paket segmentleri ve Android manifest bileşeni tür adları, Android ile uyumlu, daha sınırlı bir BMP harfleri kümesini, ilk karakterden sonra ondalık rakamları, alt çizgileri ve dolar işaretlerini kullanır. Karakterleri birleştirmekten, biçimlendirmekten ve tamamlayıcı karakterlerden kaçının. Hiçbir bölüm Java anahtar sözcüğü olamaz; tür adlarında da record gibi kısıtlanmış tanımlayıcılar kullanılmamalıdır.

<activity-alias> için bu tür adı kısıtlamaları android:targetActivity için geçerlidir, android:name için değil. Takma ad, keyfi bir bileşen tanımlayıcısıdır ve bir Java sınıfına atıfta bulunmaz.