.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 原始碼路徑。 補充字元被拒絕,因為 Android 的類別載入器無法解析包含簡單名稱中補充字元的類別,即使 DEX 中有相同的描述符。

這可能源自於 $(ApplicationId) MSBuild 屬性、AndroidManifest.xml 中的 package 屬性、受控型別名稱,或是由 [Register] 或 [JniTypeSignature] 等屬性明確指定的 Java 名稱。

解決方案

使用 NFC 名稱。 Java 類型區段支援 Java 21 BMP 識別碼起始,包括貨幣符號與連接埠標點符號,以及第一個字元後的十進位數字。 套件區段與 Android 清單元件類型名稱使用較窄的 Android 相容 BMP 字母集合,首字母後的十進位數字、底線和美元符號。 避免合併、格式化及補充字元。 任何區段不得是 Java 關鍵字;型別名稱也必須避免使用受限識別碼,如 record。

對於 <activity-alias>,這些型別名稱限制適用於 android:targetActivity,而非 android:name。 別名名稱是任意的元件識別碼,並不指涉 Java 類別。