注意
此功能仅在 .NET 9+ 中可用。
为适用于 Android 的 .NET 创建 Java 绑定库时,一个常见问题不是提供所需的 Java 依赖项。 绑定进程忽略需要缺少依赖项的 API,因此这可能会导致大部分所需的 API 未绑定。
与 .NET 程序集不同,Java 库不会在包中指定其依赖项。 依赖项信息存储在名为 POM 文件的外部文件中。 若要使用此信息来确保正确的依赖项,必须将附加的文件层添加到绑定项目中。
提示
与此系统交互的首选方法是使用 <AndroidMavenLibrary> 该系统,这将自动下载任何所需的 POM 文件。
例如:
<AndroidMavenLibrary Include="com.squareup.okio:okio" Version="1.17.4" />
自动扩展到:
<AndroidLibrary
Include="<MavenCacheDir>/Central/com.squareup.okio/okio/1.17.4/com.squareup.okio_okio.jar"
Manifest="<MavenCacheDir>/Central/com.squareup.okio/okio/1.17.4/com.squareup.okio_okio.pom"
JavaArtifact="com.squareup.okio:okio:1.17.4" />
<AndroidAdditionalJavaManifest
Include="<MavenCacheDir>/Central/com.squareup.okio/okio-parent/1.17.4/okio-parent-1.17.4.pom"
JavaArtifact="com.squareup.okio:okio-parent:1.17.4" />
etc.
但是,也可以通过使用此处记录的构建项目手动选择加入 Java 依赖关系验证。
规范
若要手动选择进行 Java 依赖项验证,请将Manifest和JavaArtifact属性添加到<AndroidLibrary>项中:
<!-- JavaArtifact format is {GroupId}:{ArtifactId}:{Version} -->
<ItemGroup>
<AndroidLibrary
Include="my_binding_library.jar"
Manifest="my_binding_library.pom"
JavaArtifact="com.example:mybinding:1.0.0" />
</ItemGroup>
如果 my_binding_library.pom 指定了不满足的依赖项,那么现在生成绑定项目应会导致验证错误。
例如:
error : Java dependency 'androidx.collection:collection' version '1.0.0' is not satisfied.
看到这些错误或没有错误应指示 Java 依赖项验证正常工作。 按照“解决 Java 依赖项”指南修复任何缺少的依赖项错误。
其他 POM 文件
POM 文件有时可以使用一些可选功能,使其比上述示例更为复杂。
也就是说,POM 文件可以依赖于“父”POM 文件:
<parent>
<groupId>com.squareup.okio</groupId>
<artifactId>okio-parent</artifactId>
<version>1.17.4</version>
</parent>
此外,POM 文件还可以从另一个 POM 文件“导入”依赖项信息:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.squareup.okio</groupId>
<artifactId>okio-bom</artifactId>
<version>3.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
在无法访问这些附加 POM 文件的情况下,无法准确确定依赖项信息,并会导致如下错误:
error : Unable to resolve POM for artifact 'com.squareup.okio:okio-parent:1.17.4'.
在这种情况下,我们需要为 com.squareup.okio:okio-parent:1.17.4 提供 POM 文件。
<!-- JavaArtifact format is {GroupId}:{ArtifactId}:{Version} -->
<ItemGroup>
<AndroidAdditionalJavaManifest
Include="com.square.okio.okio-parent.1.17.4.pom"
JavaArtifact="com.squareup.okio:okio-parent:1.17.4" />
</ItemGroup>
请注意,由于“父”POM和“导入”POM本身也可能具有自己的父级或导入的POM文件,我们可能需要重复此步骤,直到能够解析所有的POM文件为止。
另请注意,使用 <AndroidMavenLibrary> 时一切应自动处理。
此时,如果存在依赖项错误,请按照 “解决 Java 依赖项 ”指南修复任何缺少的依赖项错误。