Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Megjegyzés:
Ez a funkció csak a .NET 9+-ban érhető el.
A Java-függőségek ellenőrzése engedélyezve lett egy kötésprojekt esetében, akár automatikusan a <AndroidMavenLibrary> segítségével, akár manuálisan a <AndroidLibrary> használatával, előfordulhatnak hibák, például:
error : Java dependency 'androidx.collection:collection' version '1.0.0' is not satisfied.
Ezek a függőségek sokféleképpen teljesíthetők.
<PackageReference>
A legjobb esetben már elérhető a Java-függőség egy meglévő kötése a NuGet.org. Ezt a csomagot a Microsoft vagy a .NET-közösség nyújthatja. A Microsoft által karbantartott csomagok a következőhöz hasonló hibaüzenetben jelenhetnek meg:
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.
Ha hozzáadja a Xamarin.AndroidX.Collection csomagot a projekthez, automatikusan meg kell oldania ezt a hibát, mivel a csomag metaadatokat biztosít annak meghirdetéséhez, hogy az biztosítja a androidx.collection:collection függőséget. Ehhez egy speciálisan kialakított NuGet-címkét kell keresnie. Az AndroidX-gyűjtemény kódtára esetében például a címke a következőképpen néz ki:
<!-- artifact={GroupId}:{ArtifactId}:{Java Library Version} -->
<PackageTags>artifact=androidx.collection:collection:1.0.0</PackageTags>
Lehetnek azonban olyan NuGet-csomagok, amelyek megfelelnek a függőségnek, de nem adhatók hozzá ezek a metaadatok. Ebben az esetben explicit módon meg kell adnia, hogy a csomag melyik függőséget JavaArtifacttartalmazza:
<PackageReference
Include="Xamarin.Kotlin.StdLib"
Version="1.7.10"
JavaArtifact="org.jetbrains.kotlin:kotlin-stdlib:1.7.10" />
Ezzel a kötési folyamat tudja, hogy a NuGet-csomag kielégíti a Java-függőséget.
Megjegyzés:
A NuGet-csomagok saját függőségeket határoznak meg, így nem kell aggódnia a tranzitív függőségek miatt.
<ProjectReference>
Ha a szükséges Java-függőséget egy másik projekt biztosítja a megoldásban, megjegyzésekkel <ProjectReference> adhatja meg, hogy milyen függőségnek felel meg:
<ProjectReference
Include="..\My.Other.Binding\My.Other.Binding.csproj"
JavaArtifact="my.other.binding:helperlib:1.0.0" />
Ezzel a kötési folyamat tudja, hogy a Java-függőséget a hivatkozott projekt kielégíti.
Megjegyzés:
Minden projekt saját függőségeket határoz meg, ezért nem kell aggódnia az átvitt függőségek miatt.
<AndroidLibrary>
Nyilvános NuGet-csomag létrehozásakor a NuGet "csomagonként egy kódtár" szabályzatát kell követnie, hogy a NuGet függőségi gráf működjön. Ha azonban privát használatra hoz létre kötést, érdemes lehet közvetlenül a szülőkötésbe belefoglalni a Java-függőségeket.
Ezt úgy teheti meg, hogy további <AndroidLibrary> elemeket ad hozzá a projekthez:
<ItemGroup>
<AndroidLibrary Include="mydependency.jar" JavaArtifact="my.library:dependency-library:1.0.0" />
</ItemGroup>
Ha hozzá szeretné adni a Java-kódtárat, de nem szeretne C#-kötéseket létrehozni, jelölje meg a következővel Bind="false":
<ItemGroup>
<AndroidLibrary Include="mydependency.jar" JavaArtifact="my.library:dependency-library:1.0.0" Bind="false" />
</ItemGroup>
<AndroidMavenLibrary> Másik lehetőségként java-kódtárat is lekérhet egy Maven-adattárból:
<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>
Megjegyzés:
Ha a függőségi könyvtárnak saját függőségei vannak, biztosítania kell, hogy azok teljesüljenek.
<AndroidIgnoredJavaDependency>
Végső megoldásként egy szükséges Java-függőség figyelmen kívül hagyható. Ilyen például, ha a függőségi kódtár Java-széljegyzetek gyűjteménye, amelyeket csak fordítási típusban, nem futtatókörnyezetben használnak.
Vegye figyelembe, hogy bár a hibaüzenet eltűnik, nem jelenti azt, hogy a csomag varázslatosan működik. Ha a futási időben valóban szükség van a függőségre, és az nem kerül biztosításra, az Android-alkalmazás Java.Lang.NoClassDefFoundError hibával összeomlik.
<ItemGroup>
<AndroidIgnoredJavaDependency Include="com.google.errorprone:error_prone_annotations:2.15.0" />
</ItemGroup>
Megjegyzés:
JavaArtifact használatával több összetevőt is megadhatunk, amelyeket vesszővel vagy pontosvesszővel választunk el.