Android 的 .NET 错误 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类。