.NET for Android エラー XA4258

メッセージ例:

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

Issue

Javaパッケージまたは型名には、無効な識別子、Javaキーワード、または制限付き型識別子が含まれています。 Java識別子の分類は、Java 21 の Unicode 15.0 データに従うので、アプリのビルドに使用される .NET ランタイムと変わりません。

Android 用.NETでは、正規化フォーム C (NFC) 名が必要であり、ファイル システムを正規化すると、生成されたJavaソース パスを変更またはマージできるため、文字の結合と書式設定を拒否します。 DEX に正確な記述子が存在する場合でも、Android のクラス ローダーは単純な名前の補助文字を持つクラスを解決できないため、補助文字は拒否されます。

これは、$(ApplicationId) MSBuild プロパティ、AndroidManifest.xmlのpackage属性、マネージド型名、または[Register]や[JniTypeSignature]などの属性によって指定された明示的なJava名から発生します。

ソリューション

NFC 名を使用します。 Java 型セグメントは、通貨記号や連結句読点を含む Java 21 の BMP 識別子の先頭文字をサポートし、さらに先頭文字の後には 10 進数字も使用できます。 パッケージ セグメントと Android マニフェスト コンポーネントの型名では、Android 互換のより狭い BMP 文字のセット、最初の文字の後の 10 進数、アンダースコア、ドル記号が使用されます。 結合、書式設定、および補助文字は使用しないでください。 セグメントがJavaキーワードである可能性はありません。型名は、recordなどの制限付き識別子を回避する必要もあります。

<activity-alias>の場合、これらの型名の制限はandroid:nameではなく、android:targetActivityに適用されます。 エイリアス名は任意のコンポーネント識別子であり、Java クラスを参照していません。