Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Tato funkce je k dispozici pouze v .NET 9 nebo novějším.
Jakmile je pro projekt vazeb povolené ověřování závislostí v Javě, a to buď automaticky prostřednictvím <AndroidMavenLibrary>, nebo ručně prostřednictvím <AndroidLibrary>, mohou nastat chyby, například:
error : Java dependency 'androidx.collection:collection' version '1.0.0' is not satisfied.
Tyto závislosti je možné splnit mnoha různými způsoby.
<PackageReference>
V nejlepším případě existuje již existující vazba závislosti Java na NuGet.org. Tento balíček může poskytnout společnost Microsoft nebo komunita .NET. Balíčky spravované Společností Microsoft mohou být zobrazeny v chybové zprávě takto:
error : Java dependency 'androidx.collection:collection' version '1.0.0' is not satisfied. Microsoft maintains the NuGet package 'Xamarin.AndroidX.Collection' that could fulfill this dependency.
Přidání balíčku Xamarin.AndroidX.Collection do projektu by mělo tuto chybu automaticky vyřešit, protože balíček poskytuje metadata, která deklarují, že poskytuje závislost androidx.collection:collection. To se provádí vyhledáním speciálně vytvořené značky NuGet. Například pro knihovnu kolekcí AndroidX vypadá značka takto:
<!-- artifact={GroupId}:{ArtifactId}:{Java Library Version} -->
<PackageTags>artifact=androidx.collection:collection:1.0.0</PackageTags>
Mohou však existovat balíčky NuGet, které splňují závislost, ale nepřidaly do něj tato metadata. V tomto případě budete muset explicitně určit, která závislost balíček obsahuje JavaArtifact:
<PackageReference
Include="Xamarin.Kotlin.StdLib"
Version="1.7.10"
JavaArtifact="org.jetbrains.kotlin:kotlin-stdlib:1.7.10" />
Proces vazby ví, že závislost na Javě je splněna pomocí balíčku NuGet.
Poznámka:
Balíčky NuGet určují vlastní závislosti, takže si nemusíte dělat starosti s tranzitivními závislostmi.
<ProjectReference>
Pokud je potřebná závislost v Javě poskytována jiným projektem ve vašem řešení, můžete k určení závislosti, kterou splňuje, přidat poznámky <ProjectReference> :
<ProjectReference
Include="..\My.Other.Binding\My.Other.Binding.csproj"
JavaArtifact="my.other.binding:helperlib:1.0.0" />
Proces vazby ví, že závislost Java je splněna odkazovaným projektem.
Poznámka:
Každý projekt určuje vlastní závislosti, takže si nemusíte dělat starosti s tranzitivními závislostmi.
<AndroidLibrary>
Pokud vytváříte veřejný balíček NuGet, budete chtít postupovat podle zásad "jedna knihovna na balíček", aby graf závislostí NuGet fungoval. Pokud však vytváříte vazbu pro privátní použití, můžete chtít zahrnout závislosti Javy přímo do nadřazené vazby.
Můžete to udělat přidáním dalších <AndroidLibrary> položek do projektu:
<ItemGroup>
<AndroidLibrary Include="mydependency.jar" JavaArtifact="my.library:dependency-library:1.0.0" />
</ItemGroup>
Pokud chcete zahrnout knihovnu Java, ale nevytvářet pro ni vazby jazyka C#, označte ji pomocí Bind="false":
<ItemGroup>
<AndroidLibrary Include="mydependency.jar" JavaArtifact="my.library:dependency-library:1.0.0" Bind="false" />
</ItemGroup>
Alternativně <AndroidMavenLibrary> můžete použít k načtení knihovny Java z úložiště Maven:
<ItemGroup>
<AndroidMavenLibrary Include="my.library:dependency-library" Version="1.0.0" />
<!-- or, if the Java library doesn't need to be bound -->
<AndroidMavenLibrary Include="my.library:dependency-library" Version="1.0.0" Bind="false" />
</ItemGroup>
Poznámka:
Pokud má knihovna své vlastní závislosti, budete muset zajistit, aby byly splněny.
<AndroidIgnoredJavaDependency>
Jako poslední možnost je možné ignorovat potřebnou závislost v Javě. Příkladem, kdy je to užitečné, je, pokud je knihovna závislostí kolekcí poznámek Java, které se používají pouze při kompilačním typu, a ne za běhu.
Všimněte si, že zatímco chybová zpráva zmizí, neznamená to, že balíček bude magicky fungovat. Pokud je závislost skutečně nutná za běhu, ale není poskytnuta, aplikace pro Android se zhroutí s Java.Lang.NoClassDefFoundError chybou.
<ItemGroup>
<AndroidIgnoredJavaDependency Include="com.google.errorprone:error_prone_annotations:2.15.0" />
</ItemGroup>
Poznámka:
Jakékoli použití JavaArtifact může určit více artefaktů tím, že je oddělíte čárkou nebo středníkem.