共用方式為


建置流程

適用於 Android 的 .NET 建置程式負責將所有專案黏附在一起:產生Resource.designer.cs 、支援 @(AndroidAsset)@(AndroidResource)和其他建置動作、產生 Android 可呼叫包裝函式,以及在 Android 裝置上產生 .apk 執行 。

應用程式封裝

大致而言,Android 應用程式套件有兩種類型的 Android 應用程式套件(.apk 檔案)可供 .NET for Android 建置系統產生:

  • 完全獨立且不需要執行額外套件的發行 組建。 這些是提供給 App Store 的套件。

  • 偵錯組建則非如此。

這些封裝類型符合產生封裝的 MSBuild Configuration

快速部署

快速部署 的運作方式是進一步壓縮 Android 應用程式套件大小。 這可藉由從套件中排除應用程式的元件,而改為將應用程式的元件直接部署到應用程式的內部 files 目錄,通常位於 /data/data/com.some.package。 內部 files 目錄不是全域可寫入的資料夾,因此 run-as 此工具會用來執行所有命令,將檔案複製到該目錄。

此程式可加速建置/部署/偵錯循環,因為只有元件變更時,不會重新安裝套件。 只有更新的元件會重新同步處理至目標裝置。

警告

已知快速部署會在封鎖 run-as的裝置上失敗,這通常包含Android 5.0之前的裝置。

快速部署預設為啟用狀態,藉由將 $(EmbedAssembliesIntoApk) 屬性設定為 True 即可在偵錯組建中加以停用。

增強型快速部署模式可與此功能搭配使用,以進一步加速部署。 這會將這兩個元件、原生連結庫、typemap 和 dexes 部署至 files 目錄。 但是,如果您變更原生連結庫、系結或 Java 程式代碼,您才應該真的需要啟用此功能。

MSBuild 專案

適用於 Android 的 .NET 建置程式是以 MSBuild 為基礎,這也是 Visual Studio for Mac 和 Visual Studio 所使用的專案檔格式。 一般而言,使用者不需要手動編輯 MSBuild 檔案 – IDE 會建立功能完整的專案,並使用所做的任何變更加以更新,並視需要自動叫用建置目標。

進階使用者或許會想執行 IDE 之 GUI 所不支援的作業,因此建置程序是可藉由直接編輯專案檔來加以自訂。 此頁面僅記載適用於 Android 特定功能和自定義的 .NET –透過一般 MSBuild 專案、屬性和目標可以進行更多工作。

系結專案

下列 MSBuild 屬性可與繫結專案搭配使用:

Resource.designer.cs

下列 MSBuild 屬性可用來控制檔案的 Resource.designer.cs 產生:

簽署屬性

簽署屬性可控制應用程式套件的簽署方式,以便能夠將它安裝到 Android 裝置。 為了允許更快速的建置反覆專案,Android 工作的 .NET 不會在建置程式期間簽署套件,因為簽署速度相當慢。 相反地,會在安裝前或匯出期間由 IDE 或安裝建置目標簽署套件 (如有必要)。 叫用 SignAndroidPackage 目標會在輸出目錄中產生後置詞為 -Signed.apk 的套件。

根據預設,簽署目標會產生新的偵錯簽署金鑰 (如有必要)。 如果您想要使用特定金鑰,例如在組建伺服器上,則會使用下列 MSBuild 屬性:

keytool 選項對應

請考慮下列 keytool 呼叫:

$ keytool -genkey -v -keystore filename.keystore -alias keystore.alias -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password: keystore.filename password
Re-enter new password: keystore.filename password
...
Is CN=... correct?
  [no]:  yes

Generating 2,048 bit RSA key pair and self-signed certificate (SHA1withRSA) with a validity of 10,000 days
        for: ...
Enter key password for keystore.alias
        (RETURN if same as keystore password): keystore.alias password
[Storing filename.keystore]

若要使用上面所產生的金鑰儲存區,請使用屬性群組:

<PropertyGroup>
    <AndroidKeyStore>True</AndroidKeyStore>
    <AndroidSigningKeyStore>filename.keystore</AndroidSigningKeyStore>
    <AndroidSigningStorePass>keystore.filename password</AndroidSigningStorePass>
    <AndroidSigningKeyAlias>keystore.alias</AndroidSigningKeyAlias>
    <AndroidSigningKeyPass>keystore.alias password</AndroidSigningKeyPass>
</PropertyGroup>

建置擴充點

適用於 Android 建置系統的 .NET 會公開一些想要連結至建置程式的使用者公開一些公用擴充點。 若要使用其中任何一個擴充點,您必須將您的自訂目標新增到 PropertyGroup 中的適當 MSBuild 屬性內。 例如:

<PropertyGroup>
   <AfterGenerateAndroidManifest>
      $(AfterGenerateAndroidManifest);
      YourTarget;
   </AfterGenerateAndroidManifest>
</PropertyGroup>

延伸點包括:

關於擴充建置程式的警告:如果未正確撰寫,建置延伸模組可能會影響您的組建效能,尤其是在每次建置上執行時。 極力建議您先閱讀 MSBuild 文件,然後再執行這類延伸模組。

目標定義

建置程式的 .NET for Android 特定部分定義於 $(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets中,但建置元件也需要一般語言特定目標,例如 Microsoft.CSharp.targets

在匯入任何語言目標之前,必須先設定下列組建屬性:

<PropertyGroup>
  <TargetFrameworkIdentifier>MonoDroid</TargetFrameworkIdentifier>
  <MonoDroidVersion>v1.0</MonoDroidVersion>
  <TargetFrameworkVersion>v2.2</TargetFrameworkVersion>
</PropertyGroup>

藉由匯入 Xamarin.Android.CSharp.targets,即可針對 C# 納入這些目標和屬性:

<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />

此檔案可輕鬆地適用於其他語言。