散發系結連結庫
一旦 Java 連結庫系結至適用於 Android 的 .NET 使用之後,就可以使用多種方式:
項目參考 - 如果系結專案和應用程式項目位於相同的方案檔中,則使用
<ProjectReference>
通常是取用系結的最簡單方式。NuGet 套件 - NuGet 套件 適用於公用發佈,或適用於具有內部 NuGet 伺服器的內部分散式開發環境。
檔案參考 - 如果系結
.dll
專案和 NuGet 伺服器都無法使用,取用的應用程式可以直接將 新增<Reference>
至系結。
控制系結和封裝選項
系結連結庫專案有兩個選項可控制是否 <AndroidLibrary>
系結並重新發佈:
- 系結 (
true
false
/) - 預設值為true
,這表示會為指定的<AndroidLibrary>
建立Managed系結。 設定為false
表示 Java 連結庫會包含在輸出中,但不會有 Managed 系結。 如果連結庫需要另一個 Java 連結庫的相依性,但不會從 C# 呼叫,這會很有用。
<!-- Java library will have C# bindings and be included in the output -->
<AndroidLibrary Include="okhttp-4.12.0.jar" />
<!-- Java library will not have C# bindings but will still be included in the output -->
<AndroidLibrary Include="okio-3.9.0.jar" Bind="false" />
- 套件 (
true
/false
) - 預設值為true
,表示指定的<AndroidLibrary>
將會包含在輸出中(例如 NuGet 套件)。 設定為false
表示不會將 Java 連結庫包含在輸出中。 這是罕見的情況,以防相依性已透過替代方式提供。
<!-- Java library will have C# bindings and be included in the output -->
<AndroidLibrary Include="okhttp-4.12.0.jar" />
<!-- Java library will have C# bindings but will *not* be included in the output -->
<AndroidLibrary Include="okio-3.9.0.jar" Pack="false" />
專案參考
如果系結專案和應用程式項目位於相同的方案檔中,則使用 <ProjectReference>
通常是取用系結的最簡單方式:
<ProjectReference Include="mybindinglib.csproj" />
建置系統將負責將Managed系結和任何 .jar
/.aar
檔案新增至應用程式專案。
NuGet 套件
作為繼承自 .NET SDK 樣式專案的屬性,任何系結連結庫都可以使用 Visual Studio 中的 “Pack” 命令,或從命令行將任何系結連結庫簡單封裝成可轉散發的 NuGet 套件:
dotnet pack
系結連結庫以及 Java 連結函式庫將會包含在 NuGet 套件中:
Pack
使用上面記載的屬性來控制 NuGet 套件中所需的 Java 連結庫。
您可以使用標準 .NET MSBuild 元素來自定義 NuGet 套件。
檔案參考
如果上述兩個選項都不可能,可以直接使用 <Reference>
項目參考系結.dll
。 請注意,屬於系結項目輸出一部分的任何 Java 連結庫都必須位於與系結 .dll
相同的目錄中。
如果您只將系結 .dll
移至另一個位置,而且不會移動/複製任何 .jar
/.dll
檔案,它們最終不會出現在您的應用程式中,而且系結會在運行時間失敗。
重要
在傳統 Xamarin.Android 中使用項目動作,就像 EmbeddedJar
將檔案放在 .jar
內 .dll
,而且只需要一個檔案。 Android 版 .NET 已移除這項支持,因為它大幅提升應用程式建置時間,以掃描和擷取內嵌的 Java 連結庫檔案。 任何必要的 .jar
/.dll
檔案都必須位於與系結 .dll
相同的目錄中。