共用方式為


組建屬性

MSBuild 屬性會控制目標的行為

這些專案是在 MSBuild PropertyGroup的項目檔內指定,例如 MyApp.csproj

注意

在適用於 Android 的 .NET 中,應用程式與系結項目在技術上沒有區別,因此屬性會在兩者中運作。 在實務上,強烈建議建立個別的應用程式和系結專案。 主要用於系結專案的屬性記載於 MSBuild 系結專案屬性 參考指南中。

AdbTarget

屬性 $(AdbTarget) 會指定 Android 套件可安裝至或移除的 Android 目標裝置。 此屬性的值與 [目標裝置] 選項相同adb

AfterGenerateAndroidManifest

這個屬性中列出的 MSBuild 目標會直接在內部_GenerateJavaStubs目標之後執行,也就是 在中$(IntermediateOutputPath)產生檔案的位置AndroidManifest.xml。 如果您想要對產生的 AndroidManifest.xml 檔案進行任何修改,可以使用這個延伸點來執行此作業。

AndroidAapt2CompileExtraArgs

指定在處理 Android 資產和資源時傳遞至 aapt2 編譯 命令的命令行選項。

AndroidAapt2LinkExtraArgs

指定在處理 Android 資產和資源時傳遞至 aapt2 連結 命令的命令行選項。

AndroidAddKeepAlives

布爾值屬性,控制連結器是否會在系結專案內插入 GC.KeepAlive() 調用,以防止過早的物件集合。

預設值是 True 發行組態組建。

AndroidAotAdditionalArguments

字串屬性,允許在具有 或 $(AotAssemblies) 設定true為的專案$(AndroidEnableProfiledAot)的工作Aot期間,將選項傳遞至Mono編譯程式。 呼叫Mono跨編譯程式時,屬性的字串值會新增至回應檔。

一般而言,此屬性應該保留空白,但在某些特殊案例中,它可能會提供有用的彈性。

屬性 $(AndroidAotAdditionalArguments) 與相關 $(AndroidExtraAotOptions) 屬性不同; $(AndroidAotAdditionalArguments) 傳遞完整的獨立空格分隔選項,例如 --verbose--debug 傳遞至 AOT 編譯程式,同時 $(AndroidExtraAotOptions) 包含逗號分隔自變數,這是 AOT 編譯程式選項的一部分 --aot

AndroidAotCustomProfilePath

應該建立以保存分析工具數據的檔案 aprofutil

AndroidAotProfiles

字串屬性,可讓開發人員從命令行新增AOT配置檔。 這是絕對路徑的分號或逗號分隔清單。

AndroidAotProfilerPort

取得分析數據時應該連接的埠 aprofutil

AndroidAotEnableLazyLoad

啟用延遲(延遲)載入 AOTd 元件,而不是在啟動時預先載入它們。 預設值是 True 針對啟用任何形式的 AOT 的發行組建。

在 .NET 6 中引進。

AndroidApkDigestAlgorithm

字串值,指定要搭配 jarsigner -digestalg使用的摘要演算法。

預設值是 SHA-256

AndroidApkSignerAdditionalArguments

字串屬性,可讓開發人員提供工具的 apksigner 自變數。

AndroidApkSigningAlgorithm

字串值,指定要搭配 jarsigner -sigalg使用的簽署演算法。

預設值是 SHA256withRSA

AndroidApplication

布爾值,指出專案是針對Android應用程式 (True) 或Android連結庫專案 (False 或不存在)。

Android 套件內只能有一個具有 <AndroidApplication>True</AndroidApplication> 的專案。 (不幸的是,這項需求並未經過驗證,這可能會導致關於 Android 資源的細微和奇怪的錯誤。

AndroidApplicationJavaClass

當類別繼承自 Android.App.Application 時,要取代android.app.Application的完整 Java 類別名稱。

屬性 $(AndroidApplicationJavaClass) 通常是由 其他 屬性所設定,例如 $(AndroidEnableMultiDex) MSBuild 屬性。

AndroidAvoidEmitForPerformance

布爾值屬性,可判斷是否 System.Reflection.Emit 「避免」改善啟動效能。 這個屬性的預設值是 True

的使用 System.Reflection.Emit 對 Android 上的啟動效能有明顯的影響。 根據預設,下列功能參數會停用此行為:

  • Switch.System.Reflection.ForceInterpretedInvoke:在第二次呼叫 MethodInfo.Invoke()ConstructorInfo.Invoke()之後,會發出程式代碼以改善重複呼叫的效能。

  • Microsoft.Extensions.DependencyInjection.DisableDynamicEngine:在第二次從相依性插入容器擷取服務之後,會發出程式代碼以改善重複呼叫的效能。

在大部分的Android應用程式中,最好停用此行為。

如需可用功能參數的詳細資訊,請參閱基類連結庫功能交換器檔

已在 .NET 8 中新增。

AndroidBinUtilsPath

包含 Android binutils 之目錄的路徑,例如 ld、原生連結器,以及 as原生組合器。 這些工具包含在適用於 Android 的 .NET 工作負載中。

預設值是 $(MonoAndroidBinDirectory)\binutils\bin\

AndroidBoundExceptionType

字串值,指定當 .NET for Android 提供的型別實作 .NET 型別或介面時,應該如何傳播例外狀況,例如 Android.Runtime.InputStreamInvokerSystem.IO.Stream或 和 Android.Runtime.JavaDictionary System.Collections.IDictionary

  • Java:原始的 Java 例外狀況類型會依原樣傳播。

    Java 表示,例如, InputStreamInvoker 不會正確實 System.IO.Stream 作 API,因為 Java.IO.IOException 可能會從 Stream.Read() 擲回 ,而不是 System.IO.IOException

  • System:原始的 Java 例外狀況類型會攔截並包裝在適當的 .NET 例外狀況類型中。

    System表示,例如,InputStreamInvoker正確實作 System.IO.Stream,而且Stream.Read()不會擲回Java.IO.IOException實例。 (它可能會擲回 System.IO.IOException ,其中包含 Java.IO.IOException 作為 Exception.InnerException 值。

    System 為預設值。

AndroidBoundInterfacesContainConstants

布爾值屬性,決定是否支援介面上的系結常數,或使用建立 IMyInterfaceConsts 類別的因應措施。

預設值是 True

AndroidBoundInterfacesContainStaticAndDefaultInterfaceMethods

布林值屬性,不論介面上的預設和靜態成員是支援的,還是建立包含靜態成員的同層級類別的舊因應措施,例如 abstract class MyInterface

預設值在 True .NET 6 中,而 False 舊版則為 。

AndroidBoundInterfacesContainTypes

布林值屬性,不論介面中巢狀類型是否支援,還是建立非巢狀類型的因應措施,例如 IMyInterfaceMyNestedClass

預設值在 True .NET 6 中,而 False 舊版則為 。

AndroidBuildApplicationPackage

布爾值,指出是否要建立和簽署封裝 (.apk)。 將此值設定為 True 相當於使用 SignAndroidPackage 組建目標。

這個屬性的預設值是 False

AndroidBundleConfigurationFile

指定要在建置 Android 應用程式套件組合時用來作為組態檔bundletool的檔名。 此檔案控制從套件組合產生 APK 的一些層面,例如,套件組合要分割哪些維度來產生 APK。 適用於 Android 的 .NET 會自動設定其中一些設定,包括要保持未壓縮的擴展名清單。

只有當 設定為 aab$(AndroidPackageFormat),這個屬性才相關。

AndroidBundleToolExtraArgs

指定建置應用程式套件組合時要傳遞至 bundletool 命令的命令行選項。

AndroidClassParser

字串屬性,控制檔案剖析的方式 .jar 。 可能的值包括:

  • class-parse:使用 class-parse.exe 來直接剖析 Java 位元組程式碼,而不需要 JVM 的協助。

  • jar2xml:此值已過時,不再受到支援。

AndroidCodegenTarget

控制程式代碼產生目標 ABI 的字串屬性。 可能的值包括:

  • XamarinAndroid:此值已過時,不再受到支援。

  • XAJavaInterop1:在 JNI 引動過程使用 Java.Interop。 使用 XAJavaInterop1 的繫結組件只可使用 Xamarin.Android 6.1 或更新版本來建置及執行。 Xamarin.Android 6.1 及更新版本使用此值繫結 Mono.Android.dll

預設值是 XAJavaInterop1

AndroidCreatePackagePerAbi

布爾值屬性,決定是否應建立一組檔案---每個 ABI 所$(AndroidSupportedAbis)指定的檔案集,而不是在單.apk一 中支援所有 ABI。

另請參閱建置 ABI 特定 APK 指南。

AndroidCreateProguardMappingFile

布爾值屬性,可控制 Proguard 對應檔案是否在建置程式中產生。

將下列內容新增至您的 csproj 會導致產生檔案,並使用 AndroidProguardMappingFile 屬性來控制最終對應檔的位置。

<AndroidCreateProguardMappingFile>True</AndroidCreateProguardMappingFile>

產生 .aab 檔案時,對應檔案會自動包含在您的套件中。 不需要手動將它上傳至Google Play商店。 使用 .apk 檔案時, AndroidProguardMappingFile 必須手動上傳 。

預設值是 True 使用 $(AndroidLinkTool)=r8 時。

AndroidDebugKeyAlgorithm

指定要用於 debug.keystore的預設演算法。 預設值是 RSA

AndroidDebugKeyValidity

指定要用於 debug.keystore的預設有效性。 預設值為 1095030 * 36530 years

AndroidDebugStoreType

指定要用於的 debug.keystore金鑰存放區檔案格式。 其預設為 pkcs12

AndroidDeviceUserId

允許在來賓或工作帳戶下部署和偵錯應用程式。 此值是您 uid 從下列 adb 命令取得的值:

adb shell pm list users

上述命令會傳回下列資料:

Users:
	UserInfo{0:Owner:c13} running
	UserInfo{10:Guest:404}

uid是第一個整數值。 在上述輸出中,它們是 010

AndroidDexTool

具有有效值為 d8的列舉樣式屬性。 先前,Xamarin.Android 支援 的值 dx

指出在 .NET for Android 建置程式期間使用哪些 Android dex 編譯程式。 預設值是 d8。 請參閱我們的 D8 和 R8

AndroidEnableDesugar

布爾值屬性,決定是否 desugar 已啟用。 Android 目前不支援所有 Java 8 功能,而預設工具鏈會在編譯程式的輸出javac上執行稱為的位元組程式代碼轉換desugar,以實作新的語言功能。 如果使用 ,則預設值為 False ,如果使用 ,則為$(AndroidDexTool)True=d8$(AndroidDexTool)=dx

AndroidEnableGooglePlayStoreChecks

bool 屬性,可讓開發人員停用下列 Google Play 商店檢查:XA1004、XA1005 和 XA1006。 停用這些檢查對不是以Google Play商店為目標且不想執行這些檢查的開發人員很有用。

AndroidEnableMarshalMethods

bool 屬性,決定是否啟用 LLVM 封送處理方法。 LLVM 封送處理方法是應用程式啟動優化,其使用原生進入點進行Java native 方法註冊。

此屬性預設為 False。

已在 .NET 8 中新增。

AndroidEnableMultiDex

布爾值屬性,決定是否要在最後 .apk一個 中使用多重索引支援。

這個屬性的預設值是 False

AndroidEnableObsoleteOverrideInheritance

布爾值屬性,決定系結方法是否會自動從它們覆寫的方法繼承 [Obsolete] 屬性。

.NET 8 已新增此屬性的支援。

這個屬性的預設值是 True

AndroidEnablePreloadAssemblies

布爾值屬性,可控制應用程式封裝內所有受管理元件是否在進程啟動期間載入。

設定為 True 時,就會在流程啟動期間先載入應用程式套件內隨附的所有組件,然後再叫用任何應用程式程式碼。

設定為 False 時,組件將只會在需要時載入。 視需要載入元件可讓應用程式更快啟動,而且也與桌面 .NET 語意更一致。 若要查看省下的時間,請設定 debug.mono.log 系統屬性以包括 timing,並在 adb logcat 內尋找 Finished loading assemblies: preloaded 訊息。

使用相依性插入的應用程式或連結庫可能需要此屬性True,如果它們接著需要AppDomain.CurrentDomain.GetAssemblies()傳回應用程式套件組合內的所有元件,即使不需要元件也一樣。

根據預設,此值為 False。

AndroidEnableProfiledAot

布爾值屬性,決定在預先編譯期間是否使用 AOT 配置檔。

配置檔列於 @(AndroidAotProfile) 專案群組。 此 ItemGroup 包含預設設定檔。 您可以藉由移除現有的 AOT 設定檔並新增您自己的 AOT 設定檔來覆寫它。

這個屬性的預設值是 False

AndroidEnableRestrictToAttributes

具有和 disable有效值的obsolete列舉樣式屬性。

當設定為 obsolete時,以 Java 批註androidx.annotation.RestrictTo標記或未匯出的 Java 套件中的類型和成員,將會以 [Obsolete] C# 系結中的 屬性標示。

此屬性 [Obsolete] 有描述性訊息,說明 Java 套件擁有者會將 API 視為「內部」,並對其使用發出警告。

此屬性也有自定義警告程序代碼 XAOBS001 ,因此可以獨立於「一般」過時的 API 進行隱藏。

當設定為 disable時,API 會以一般方式產生,而且沒有額外的屬性。 (這與 .NET 8 之前的行為相同。

新增 [Obsolete] 屬性,而不是自動移除 API,以保留與現有套件的 API 相容性。 如果您寧願移除具有註釋的成員,或是在未匯出的 Java 套件中,除了此屬性之外,您還可以使用轉換檔案,以防止這些類型系結:@RestrictTo

<remove-node path="//*[@annotated-visibility]" />

.NET 8 已新增此屬性的支援。

這個屬性預設會設定為 obsolete

AndroidEnableSGenConcurrent

布爾值屬性,決定是否要使用Mono的 並行 GC 收集器

這個屬性的預設值是 False

AndroidErrorOnCustomJavaObject

布林值屬性,判斷型別是否可以實 Android.Runtime.IJavaObject作而不 繼承自 Java.Lang.ObjectJava.Lang.Throwable

class BadType : IJavaObject {
    public IntPtr Handle {
        get {return IntPtr.Zero;}
    }

    public void Dispose()
    {
    }
}

當為 True 時,這類類型會產生 XA4212 錯誤,否則會產生 XA4212 警告。

這個屬性的預設值是 True

AndroidExplicitCrunch

不再支援這個屬性。

AndroidExtraAotOptions

字串屬性,允許在具有 或 $(AotAssemblies) 設定true為的專案$(AndroidEnableProfiledAot)的工作Aot期間,將選項傳遞至Mono編譯程式。 呼叫Mono跨編譯程式時,屬性的字串值會新增至回應檔。

一般而言,此屬性應該保留空白,但在某些特殊案例中,它可能會提供有用的彈性。

屬性與相關$(AndroidAotAdditionalArguments)屬性不同;$(AndroidAotAdditionalArguments)會將$(AndroidExtraAotOptions)逗號分隔的自變數--aot放在Mono編譯程式的選項中。 $(AndroidExtraAotOptions) 而是將完整的獨立空間分隔選項,例如 --verbose--debug 傳遞給編譯程式。

AndroidFastDeploymentType

: 以冒號分隔的值清單,可控制當 MSBuild 屬性為 False$(EmbedAssembliesIntoApk),哪些類型可以部署到目標裝置上的快速部署目錄。 資源如果使用快速部署,則不會內嵌到所產生的 .apk,從而可加快部署時間 (部署速度越快,重建所需的頻率 .apk 越少,安裝程式可能更快。有效值包括:

  • Assemblies:部署應用程式組件。
  • Dexes:部署 .dex 檔案、原生連結庫和 typemap。 Dexes只能在執行 Android 4.4 或更新版本的裝置上使用(API-19)。

預設值是 Assemblies

認可 f0d565fe移除透過該系統快速部署資源和資產的支援。 這是因為需要使用已被取代的 API 才能運作。

**.NET 9 已移除此功能的支援

實驗

AndroidFragmentType

指定在產生配置繫結程式碼時,要用於所有 <fragment>配置元素的預設完整類型。 預設值為標準 Android Android.App.Fragment 類型。

AndroidGenerateJniMarshalMethods

布爾屬性,可在建置過程中產生 JNI 封送處理方法。 這可大幅減少 System.Reflection 系結協助程式程式代碼中的使用量。

預設值是 False。 如果開發人員想要使用新的 JNI 封送處理方法功能,他們可以設定

<AndroidGenerateJniMarshalMethods>True</AndroidGenerateJniMarshalMethods>

在中的 .csproj。 或者,透過下列參數在命令列上提供屬性:

-p:AndroidGenerateJniMarshalMethods=True

實驗。 預設值是 False

AndroidGenerateJniMarshalMethodsAdditionalArguments

字串屬性,可用來將參數jnimarshalmethod-gen.exe加入調用中,而且可用於偵錯,因此可以使用、 或 --keeptemp-v-d選項。

預設值為空字串。 它可以在檔案或 .csproj 命令行上設定。 例如:

<AndroidGenerateJniMarshalMethodsAdditionalArguments>-v -d --keeptemp</AndroidGenerateJniMarshalMethodsAdditionalArguments>

or:

-p:AndroidGenerateJniMarshalMethodsAdditionalArguments="-v -d --keeptemp"

AndroidGenerateLayoutBindings

如果設定為 ,則啟用配置程式代碼後置產生,如果設定falsetrue ,則完全停用。

預設值是 false

AndroidGenerateResourceDesigner

預設值是 true。 當 設定為 false時,會停用的 Resource.designer.cs產生。

AndroidHttpClientHandlerType

控制預設建System.Net.Http.HttpClient構函式將使用的預設System.Net.Http.HttpMessageHandler實作。 該值為 HttpMessageHandler 子類別的組件限定類型名稱,適合搭配 System.Type.GetType(string) 使用。

在 .NET 6 和更新版本中,只有在搭配 $(UseNativeHttpHandler)=true使用時,這個屬性才會生效。 此屬性最常見的值:

  • Xamarin.Android.Net.AndroidMessageHandler:使用Android Java API 來執行 HTTP 要求。 其與舊版 Xamarin.Android.Net.AndroidClientHandler 類似,有數項改進功能。 它支援 HTTP 1.1 和 TLS 1.2。 這是預設的 HTTP 訊息處理程式。

  • System.Net.Http.SocketsHttpHandler, System.Net.Http:.NET 中的預設訊息處理程式。 它支援 HTTP/2、TLS 1.2,而且建議搭配 Grpc.Net.Client 使用的 HTTP 訊息處理程式。 這個值相當於 $(UseNativeHttpHandler)=false

  • 取消設定/空字串,相當於 System.Net.Http.HttpClientHandler, System.Net.Http

    對應至 Visual Studio 屬性頁中的 [預設 ] 選項。

    當 Visual Studio 中的 [Android 最低版本] 設定為 [Android 4.4.87] 或更低版本,或當 Visual Studio for Mac 中的 [目標平台] 設定為 [新式開發] 或 [相容性上限] 時,[新增專案精靈] 會為新專案選取此選項。

  • System.Net.Http.HttpClientHandler, System.Net.Http:使用 Managed HttpMessageHandler

    對應至 Visual Studio 屬性頁中的 Managed 選項。

注意

在 .NET 6 中,您指定的類型不得為 Xamarin.Android.Net.AndroidClientHandlerSystem.Net.Http.HttpClientHandler 繼承自其中一個類別。 如果您要從「傳統」Xamarin.Android 移轉,請改用 AndroidMessageHandler 或衍生自定義處理程式。

注意

支援 $(AndroidHttpClientHandlerType) 屬性的運作方式是設定 XA_HTTP_CLIENT_HANDLER_TYPE 環境變數$XA_HTTP_CLIENT_HANDLER_TYPE在檔案中找到的值,其建置動作為@(AndroidEnvironment) 會優先使用。

AndroidIncludeWrapSh

布爾值,指出Android包裝函式腳本 (wrap.sh) 是否應該封裝到 APK 中。 默認值為 false ,因為包裝函式腳本可能會大幅影響應用程式啟動和運作的方式,而且只有在需要時才包含腳本,例如偵錯或變更應用程式啟動/運行時間行為時。

腳本會使用 新增至專案 @(AndroidNativeLibrary) 建置動作,因為它會放在與架構特定原生連結庫相同的目錄中,而且必須命名為 wrap.sh

指定文稿路徑 wrap.sh 最簡單的方式,就是將它放在以目標架構命名的目錄中。 如果您每個架構只有一個 wrap.sh ,此方法將會運作:

<AndroidNativeLibrary Include="path/to/arm64-v8a/wrap.sh" />

不過,如果您的專案需要每個架構一個 wrap.sh 以上的架構,則此方法將無法運作。 相反地,在這種情況下,可以使用 的AndroidNativeLibrary元數據來指定Link名稱:

<AndroidNativeLibrary Include="/path/to/my/arm64-wrap.sh">
  <Link>lib\arm64-v8a\wrap.sh</Link>
</AndroidNativeLibrary>

Link如果使用元數據,其值中指定的路徑必須是相對於 APK 根目錄的有效原生架構特定連結庫路徑。 路徑的格式可以是lib\ARCH\wrap.shARCH下列其中之一:

  • arm64-v8a
  • armeabi-v7a
  • x86_64
  • x86

AndroidIncludeAssetPacksInPackage

此屬性會控制資產套件組建是否會自動包含在最終 .aab 檔案中。 預設預設為 true

在某些情況下,使用者可能會想要釋放過渡版本。 在這些情況下,使用者不需要更新資產套件。 特別是資產套件的內容尚未變更時。 此屬性可讓使用者在不需要時略過資產套件。

在 .NET 9 中新增

AndroidInstallJavaDependencies

預設值為 true 命令行組建。 設定為 true時,可在執行 <InstallAndroidDependencies/> 目標時啟用 Java SDK 的安裝。

.NET 9 已新增此屬性的支援。

AndroidJavadocVerbosity

指定在系結項目中匯入 Javadoc 檔時,應該如何「詳細資訊」 C# XML 檔批注

需要使用 @(JavaSourceJar) 建置動作。

屬性 $(AndroidJavadocVerbosity) 類似列舉,其可能值為 fullintellisense

預設值是 intellisense

AndroidKeyStore

布爾值,指出是否應該使用自定義簽署資訊。 預設值是 False,也就是會使用預設的偵錯簽署金鑰來簽署套件。

AndroidLaunchActivity

要啟動的 Android 活動。

AndroidLinkMode

指定應該在 Android 套件中包含的元件上執行哪種連結類型。 僅限用於 Android 應用程式專案內。 預設值是 SdkOnly。 有效值為:

  • :不會嘗試任何連結。

  • SdkOnly:只會對基底類別庫執行連結,而不會對使用者的組件執行。

  • 完整:會對基底類別庫和使用者組件執行連結。

    注意

    若使用的 AndroidLinkMode 值為 Full,通常會導致應用程式損壞,特別是在使用了「反映」時。 除非您確實了解您正在執行的動作,否則請避免使用此值。

<AndroidLinkMode>SdkOnly</AndroidLinkMode>

AndroidLinkResources

當 為 時 true,建置系統會連結所有元件中Resource.Designer.cs Resource 類別的巢狀類型。 使用這些類型的 IL 程式代碼將會更新為直接使用值,而不是存取欄位。

連結巢狀類型可能會對減少 apk 大小產生很小的影響,也可以協助啟動效能。 只有「發行」組建已連結。

實驗。 僅設計來使用程式代碼,例如

var view = FindViewById(Resources.Ids.foo);

不支援任何其他案例(例如反映)。

AndroidLinkSkip

指定不應該連結之元件的分號分隔清單,;不含擴展名的元件名稱。 僅限用於 Android 應用程式專案內。

<AndroidLinkSkip>Assembly1;Assembly2</AndroidLinkSkip>

AndroidLinkTool

具有 或 r8有效值的proguard列舉樣式屬性。 指出哪一個程式碼壓縮工具用於 Java 程式碼。 預設值為空字串,如果為 ,則proguard$(AndroidEnableProguard)True。 請參閱我們的 D8 和 R8

AndroidLintEnabled

bool 屬性,可讓開發人員在封裝程式中執行Android lint 工具。

當 =True 時 $(AndroidLintEnabled),會使用下列屬性:

也可以使用下列建置動作:

如需 Android lint 工具的詳細資料,請參閱 Lint 說明

AndroidLintEnabledIssues

字串屬性,這是要啟用之lint問題的逗號分隔清單。

只有在 =True 時才 $(AndroidLintEnabled)使用。

AndroidLintDisabledIssues

字串屬性,這是要停用之lint問題的逗號分隔清單。

只有在 =True 時才 $(AndroidLintEnabled)使用。

AndroidLintCheckIssues

字串屬性,這是要檢查之lint問題的逗號分隔清單。

只有在 =True 時才 $(AndroidLintEnabled)使用。

注意:只會檢查這些問題。

AndroidManagedSymbols

布爾值屬性,可控制是否產生序列點,以便從堆疊追蹤擷取 Release 檔名和行號資訊。

AndroidManifest

指定要作為應用程式範本的 AndroidManifest.xml檔案名。 建置期間會合併任何其他必要值以產生實際的 AndroidManifest.xml$(AndroidManifest) 必須在 /manifest/@package 屬性中包含套件名稱。

AndroidManifestMerger

指定合併 AndroidManifest.xml 檔案的實作。 這是列舉樣式屬性,其中 legacy 會選取原始 C# 實作,並 manifestmerger.jar 選取 Google 的 Java 實作。

預設值目前 manifestmerger.jar為 。 如果您想要使用舊版,請將下列內容新增至您的 csproj

<AndroidManifestMerger>legacy</AndroidManifestMerger>

Google 的合併支援,xmlns:tools="http://schemas.android.com/tools"如 Android 檔所述

AndroidManifestMergerExtraArgs

提供 Android 檔案工具自變數的字串屬性。

如果您要工具的詳細輸出,您可以將下列內容新增至 .csproj

<AndroidManifestMergerExtraArgs>--log VERBOSE</AndroidManifestMergerExtraArgs>

AndroidManifestType

具有 或 GoogleV2有效值的Xamarin列舉樣式屬性。 這會控制 所使用的存放庫 InstallAndroidDependencies 目標可判斷哪些 Android 套件和套件版本可供使用,而且可以安裝。

Xamarin是 Visual Studio SDK 管理員內的核准清單 (建議) 存放庫。

GoogleV2是 Visual Studio SDK 管理員的完整清單(不支援)存放庫。

如果未 $(AndroidManifestType) 設定 ,則會 Xamarin 使用 。

AndroidManifestPlaceholders

AndroidManifest.xml的索引鍵/值取代組分號分隔清單,其中每個組都有 格式 key=value

例如,的 assemblyName=$(AssemblyName) 屬性值會定義一個 ${assemblyName} 佔位元,然後會出現在 AndroidManifest.xml

<application android:label="${assemblyName}"

這可讓您將建置程式中 的變數插入AndroidManifest.xml 檔案中。

AndroidMultiDexClassListExtraArgs

字串屬性,可讓開發人員在產生multidex.keep檔案時將自變數傳遞至 com.android.multidex.MainDexListBuilder

其中一個特定情況是您在 dx 編譯期間收到下列錯誤時。

com.android.dex.DexException: Too many classes in --main-dex-list, main dex capacity exceeded

如果您收到此錯誤,您可以將下列內容新增至 .csproj

<DxExtraArguments>--force-jumbo </DxExtraArguments>
<AndroidMultiDexClassListExtraArgs>--disable-annotation-resolution-workaround</AndroidMultiDexClassListExtraArgs>

這可讓 dx 步驟成功。

AndroidPackageFormat

具有 或 aab有效值的apk列舉樣式屬性。 指出您是否要將 Android 應用程式封裝為 APK 檔案Android 應用程式套件組合。 應用程式套件組合是 Release 的新格式,專供 Google Play 中的提交之用。 預設值是 apk

$(AndroidPackageFormat) 的設定為 aab 時,將會一併設定 Android 應用程式套件組合所需的其他 MSBuild 屬性:

此屬性將會針對 .net 6 淘汰。 使用者應該切換至較新的 AndroidPackageFormats

AndroidPackageFormats

具有和 aab有效值的apk分號分隔屬性。 指出您是否要將 Android 應用程式封裝為 APK 檔案Android 應用程式套件組合。 應用程式套件組合是 Release 的新格式,專供 Google Play 中的提交之用。

建置發行組建時,您可能會想要同時產生 和 和 aab apk ,以便散發到各種存放區。

將設定 AndroidPackageFormatsaab;apk 將會產生這兩者。 將設定 AndroidPackageFormatsaabapk 只會產生一個檔案。

預設值aab;apkRelease僅適用於組建。 建議您繼續使用進行偵 apk 錯。

AndroidPackageNamingPolicy

列舉樣式屬性,用於指定所產生 Java 原始程式碼的 Java 套件名稱。

唯一支援的值為 LowercaseCrc64

AndroidPrepareForBuildDependsOn

分號分隔屬性,可用來擴充Android建置程式。 新增至此屬性的 MSBuild 目標將會在建置初期針對 Application 和 Library 專案類型執行。 此屬性預設為空白。

範例:

<PropertyGroup>
  <AndroidPrepareForBuildDependsOn>MyCustomTarget</AndroidPrepareForBuildDependsOn>
</PropertyGroup>

<Target Name="MyCustomTarget" >
  <Message Text="Running target: 'MyCustomTarget'" Importance="high"  />
</Target>

AndroidProguardMappingFile

指定的 -printmapping r8Proguard 規則。 這表示 mapping.txt 檔案將會在 $(OutputPath) 資料夾中產生。 然後將套件上傳至Google Play商店時,可以使用此檔案。

根據預設,這個檔案會在使用 AndroidLinkTool=r8 時自動產生,並會產生下列檔案 $(OutputPath)mapping.txt

如果您不想產生此對應檔案,您可以使用 AndroidCreateProguardMappingFile 屬性停止建立它。 在您的專案中新增下列內容

<AndroidCreateProguardMappingFile>False</AndroidCreateProguardMappingFile>

-p:AndroidCreateProguardMappingFile=False或在命令列上使用 。

AndroidD8IgnoreWarnings

指定要 --map-diagnostics warning info 傳遞到 d8。 默認值為 True,但可以設定為 以 False 強制執行更嚴格的行為。 如需詳細資訊, 請參閱 D8 和 R8 原始程式碼

已在 .NET 8 中新增。

AndroidR8IgnoreWarnings

指定的 -ignorewarnings r8Proguard 規則。 即使遇到特定警告,這仍允許 r8 繼續進行 dex 編譯。 默認值為 True,但可以設定為 以 False 強制執行更嚴格的行為。 如需詳細資訊, 請參閱 ProGuard 手冊

從 .NET 8 開始,指定 --map-diagnostics warning info。 如需詳細資訊, 請參閱 D8 和 R8 原始程式碼

AndroidR8JarPath

要與 r8 dex-compiler 和 shrinker 搭配使用的路徑 r8.jar 。 預設值是適用於 Android 工作負載安裝的 .NET 路徑。 如需進一步的詳細資訊,請參閱有關 D8 和 R8 的文件。

AndroidResgenExtraArgs

指定要在處理 Android 資產和資源時傳遞至 aapt 命令的命令行選項。

AndroidResgenFile

指定要產生之資源檔的名稱。 預設範本會將此值設定為 Resource.designer.cs

AndroidResourceDesignerClassModifier

指定產生的中繼 Resource 類別的類別修飾詞。 有效值為 publicinternal

根據預設,這會是 public

已在 .NET 9 中新增。

AndroidSdkBuildToolsVersion

Android SDK 建置工具套件提供 aaptzipalign 工具等。 您可以同時安裝建置工具套件的多個不同版本。 如果「慣用的」建置工具版本存在,可藉由檢查及使用該版本來完成選擇要封裝的建置工具套件,如果「慣用的」版本不存在,則會使用已安裝的建置工具套件中版本最高者。

$(AndroidSdkBuildToolsVersion) MSBuild 屬性包含慣用的建置工具版本。 .NET for Android 建置系統會在 中 Xamarin.Android.Common.targets提供預設值,而且您的專案檔內可能會覆寫預設值,以選擇替代建置工具版本,例如,如果已知舊版 aapt 版本運作時,最新的 aapt 會當機。

AndroidSigningKeyAlias

指定金鑰存放區中金鑰的別名。 這是在建立金鑰儲存區時所使用的 keytool -alias 值。

AndroidSigningKeyPass

指定金鑰存放區檔案內金鑰的密碼。 這是在 keytool 要求輸入 $(AndroidSigningKeyAlias) 的金鑰密碼時所輸入的值。

這個屬性也支援 env:file: 前置詞,可用來指定包含密碼的環境變數或檔案。 這些選項提供防止密碼出現在組建記錄中的方式。

例如,若要使用名為 AndroidSigningPassword 的環境變數:

<PropertyGroup>
  <AndroidSigningKeyPass>env:AndroidSigningPassword</AndroidSigningKeyPass>
</PropertyGroup>

若要使用位於 的 C:\Users\user1\AndroidSigningPassword.txt檔案:

<PropertyGroup>
  <AndroidSigningKeyPass>file:C:\Users\user1\AndroidSigningPassword.txt</AndroidSigningKeyPass>
</PropertyGroup>

注意

當 設定為 aab$(AndroidPackageFormat),不支援前置env:詞。

AndroidSigningKeyStore

指定 所 keytool建立之金鑰存放區檔案的檔名。 這會對應至提供給 keytool -keystore 選項的值。

AndroidSigningStorePass

將密碼指定為 $(AndroidSigningKeyStore)。 這是在建立金鑰儲存區檔案時提供給 keytool,並且會要求輸入金鑰儲存區密碼: 的值。

這個屬性也支援 env:file: 前置詞,可用來指定包含密碼的環境變數或檔案。 這些選項提供防止密碼出現在組建記錄中的方式。

例如,若要使用名為 AndroidSigningPassword 的環境變數:

<PropertyGroup>
  <AndroidSigningStorePass>env:AndroidSigningPassword</AndroidSigningStorePass>
</PropertyGroup>

若要使用位於 的 C:\Users\user1\AndroidSigningPassword.txt檔案:

<PropertyGroup>
  <AndroidSigningStorePass>file:C:\Users\user1\AndroidSigningPassword.txt</AndroidSigningStorePass>
</PropertyGroup>

注意

當 設定為 aab$(AndroidPackageFormat),不支援前置env:詞。

AndroidSigningPlatformKey

指定要用來簽署 apk 的金鑰檔案。 這隻會在建 system 置應用程式時使用。

AndroidSigningPlatformCert

指定要用來簽署 apk 的憑證檔案。 這隻會在建 system 置應用程式時使用。

AndroidStripILAfterAOT

bool 屬性,指定是否 要移除 AOT 編譯方法的方法主體

默認值為 false,且不會移除 AOT 編譯方法的方法主體。

當設定為 true時, $(AndroidEnableProfiledAot) 預設會設定為 false 。 這表示在發行組態組建中,$(RunAOTCompilation)true預設為 -- AOT 會針對所有項目啟用。 這可能會導致應用程式大小增加。 您可以藉由在項目檔內明確設定 $(AndroidEnableProfiledAot)true 覆寫此行為。

.NET 8 已新增此屬性的支援。

AndroidSupportedAbis

字串屬性,其中包含應該包含在 中.apk以分號分隔;的 API 清單。

支援的值包括:

  • armeabi-v7a
  • x86
  • arm64-v8a
  • x86_64

AndroidTlsProvider

這個屬性已經過時,不應使用。

AndroidUseAapt2

布爾值屬性,可讓開發人員控制工具的 aapt2 封裝用法。 根據預設,這會是 True。

此屬性無法設定為 false。

AndroidUseApkSigner

布林屬性,可讓開發人員使用 apksigner 工具,而不是 jarsigner

AndroidUseDefaultAotProfile

bool 屬性,可讓開發人員隱藏預設 AOT 配置檔的使用方式。

若要隱藏預設的 AOT 設定檔,請將 屬性設定為 false

AndroidUseDesignerAssembly

bool 屬性,可控制建置系統是否會以應用程式的形式產生 _Microsoft.Android.Resource.Designer.dll 檔案 Resource.Designer.cs 。 其優點是較小的應用程式和更快的啟動時間。

預設值在 true .NET 8 中。

作為 Nuget Author,如果您想要維持回溯相容性,建議您寄送三個版本的元件。 一個用於MonoAndroid,一個用於 net6.0-android,另一個用於 net8.0-android。 您可以使用 Xamarin.Legacy.Sdk 來執行此動作。 只有當 Nuget Library 專案使用 AndroidResource 專案中的專案或透過相依性時,才需要此專案。

<TargetFrameworks>monoandroid90;net6.0-android;net8.0-android</TargetFrameworks>

或者關閉此設定,直到傳統版和 net7.0-android 等時間都已被取代為止。

選擇關閉此設定的 .NET 8 專案將無法取用使用它的參考。 如果您嘗試在未啟用此功能的專案中使用已啟用此功能的元件,您將會收到 XA1034 建置錯誤。

已在 .NET 8 中新增。

AndroidUseInterpreter

布爾值屬性,導致 .apk 包含mono 解釋器,而不是一般 JIT。

實驗

AndroidUseLegacyVersionCode

布爾值屬性,可讓開發人員將versionCode計算還原回其舊版 Xamarin.Android 8.2 行為。 這應該「僅」針對 Google Play 商店中擁有現有應用程式的開發人員使用。 強烈建議使用新的 $(AndroidVersionCodePattern) 屬性。

AndroidUseManagedDesignTimeResourceGenerator

布林值屬性,會切換設計時間建置以使用 Managed 資源剖析器,而不是 aapt

AndroidUseNegotiateAuthentication

布爾值屬性,可在 中 AndroidMessageHandler啟用NTLMv2/Negotiate驗證的支援。 預設值為 [False] 。

已在 .NET 7 中新增。

AndroidUseSharedRuntime

這個屬性已經過時,不應使用。

AndroidVersionCode

MSBuild 屬性,可用來做為 檔案中的AndroidManifest.xml替代方案/manifest/@android:versionCode。 若要加入此功能,您必須開啟 <GenerateApplicationManifest>true</GenerateApplicationManifest>。 這將是 .NET 6 中的預設值。

如果使用 $(AndroidCreatePackagePerAbi)$(AndroidVersionCodePattern) ,則會忽略這個屬性。

@android:versionCode 是每個Google Play版本必須遞增的整數值。 如需 需求的詳細數據,/manifest/@android:versionCode請參閱 Android 檔

AndroidVersionCodePattern

字串屬性,可讓開發人員自訂 versionCode 指令清單中的 。 如需有關決定 versionCode 的資訊,請參閱為 APK 建立版本代碼

一些範例,如果 abiarmeabi 且資訊清單中的 versionCode123,則在 $(AndroidCreatePackagePerAbi) 為 True 時,{abi}{versionCode} 會產生 1123 的 versionCode,否則會產生 123 的值。 如果 abix86_64 且資訊清單中的 versionCode44。 當 $(AndroidCreatePackagePerAbi) 為 True 時,這會產生 544,否則會產生 44 的值。

如果我們納入左側填補格式字串 {abi}{versionCode:0000},它會產生 50044,因為我們會在 versionCode 左側填補 0。 或者,您也可以使用小數點填補 (例如 ),{abi}{versionCode:D4} 與上一個範例相同。

因為此值「必須」是整數,所以僅支援 '0' 和 'Dx' 填補格式字串。

預先定義的索引鍵項目

  • abi – 插入應用程式的目標 abi

    • 2 – armeabi-v7a
    • 3 – x86
    • 4 – arm64-v8a
    • 5 – x86_64
  • minSDK – 從 AndroidManifest.xml 中插入支援的最小 Sdk 值,如果沒有 11 定義,則為 。

  • versionCode – 直接從 Properties\AndroidManifest.xml使用版本代碼。

您可使用 $(AndroidVersionCodeProperties) 屬性 (於下一步定義) 定義自訂項目。

根據預設,值會設定為 {abi}{versionCode:D6}。 如果開發人員想要保留舊的行為,則您可以將 $(AndroidUseLegacyVersionCode) 屬性設定為 true 來覆寫預設值

AndroidVersionCodeProperties

字串屬性,可讓開發人員定義要搭配 $(AndroidVersionCodePattern)使用的自定義專案。 其格式為 key=value 組。 value 中的所有項目都應該是整數值。 例如: screen=23;target=$(_AndroidApiLevel) 。 如您所見,您可以在字串中利用現有或自訂的 MSBuild 屬性。

ApplicationId

MSBuild 屬性,可用來做為 檔案中的AndroidManifest.xml替代方案/manifest/@package。 若要加入此功能,您必須開啟 <GenerateApplicationManifest>true</GenerateApplicationManifest>。 這將是 .NET 6 中的預設值。

如需 需求的詳細數據,/manifest/@package請參閱 Android 檔

ApplicationTitle

MSBuild 屬性,可用來做為 檔案中的AndroidManifest.xml替代方案/manifest/application/@android:label。 若要加入此功能,您必須開啟 <GenerateApplicationManifest>true</GenerateApplicationManifest>。 這將是 .NET 6 中的預設值。

如需 需求的詳細數據,/manifest/application/@android:label請參閱 Android 檔

ApplicationVersion

MSBuild 屬性,可用來做為 檔案中的AndroidManifest.xml替代方案/manifest/@android:versionName。 若要加入此功能,您必須開啟 <GenerateApplicationManifest>true</GenerateApplicationManifest>。 這將是 .NET 6 中的預設值。

如需 需求的詳細數據,/manifest/@android:versionName請參閱 Android 檔

AotAssemblies

布爾值屬性,決定元件是否會預先編譯成機器碼,並包含在應用程式中。 這個屬性的預設值是 False

在 .NET 7 中已被取代。 請改為移轉至新的 $(RunAOTCompilation) MSBuild 屬性,因為未來版本將會移除對 $(AotAssemblies) 的支援。

AProfUtilExtraOptions

傳遞至 aprofutil的額外選項。

BeforeBuildAndroidAssetPacks

這個屬性中列出的 MSBuild 目標會在建置專案之前 AssetPack 直接執行。

在 .NET 9 中新增

BeforeGenerateAndroidManifest

這個屬性中列出的 MSBuild 目標會在 之前 _GenerateJavaStubs直接執行。

組態

指定要使用的組建組態,例如「偵錯」或「發行」。 組態屬性可用來決定其他會決定目標行為之屬性的預設值。 您可以在 IDE 內建立其他組態。

根據預設,組 Debug 態會產生 InstallSignAndroidPackage 目標建立較小的Android套件,需要有其他檔案和套件才能運作。

默認 Release 組態會導致 InstallSignAndroidPackage目標是建立獨立的 Android 套件,而且不需安裝任何其他套件或檔案即可使用。

DebugSymbols

布爾值,決定Android套件是否可偵錯,結合 $(DebugType) 屬性。 可偵錯套件包含偵錯符號、將 //application/@android:debuggable 屬性 設定為 true,並自動新增 INTERNET 許可權,讓調試程式可以附加至進程。 如果 DebugSymbolsTrue DebugType 是空字串或 Full,則應用程式可偵錯。

DebugType

指定要 在組建中產生之偵錯符號 的類型,這也會影響應用程式是否可偵錯。 可能的值包括:

  • 完整:產生完整符號。 如果 DebugSymbols MSBuild 屬性也是 True,然後應用程式套件是可偵錯的。

  • PdbOnly:產生 "PDB" 符號。 應用程式套件無法偵錯。

如果 DebugType 未設定或者是空字串,則 DebugSymbols 屬性會控制應用程式是否可偵錯。

EmbedAssembliesIntoApk

布爾值屬性,決定應用程式元件是否應該內嵌到應用程式套件中。

如果是發行組建,這個屬性應該是 True,如果是偵錯組建,則應該是 False。 如果快速部署不支援目標裝置,則在偵錯組建中,這個屬性可能需為 True

當這個屬性為 False時,則 $(AndroidFastDeploymentType) MSBuild 屬性也會控制將內嵌至 .apk的內容,這可能會影響部署和重建時間。

EnableLLVM

布爾值屬性,決定在預先將元件編譯成機器碼時,是否要使用 LLVM。

必須安裝 Android NDK,才能建置已啟用此屬性的專案。

這個屬性的預設值是 False

除非 $(AotAssemblies) MSBuild 屬性為 True,否則會忽略這個屬性。

EnableProguard

布爾值屬性,決定 proguard 是否在封裝程式中執行,以連結 Java 程式代碼。

這個屬性的預設值是 False

當 為 時 True將會使用 @(ProguardConfiguration) 檔案來控制 proguard 執行。

GenerateApplicationManifest

啟用或停用下列 MSBuild 屬性,以發出最終 AndroidManifest.xml 檔案中的值:

預設值 $(GenerateApplicationManifest)true

JavaMaximumHeapSize

指定在封裝過程中建.dex置檔案時要使用的jaVA-Xmx參數值值。 如果未指定,則 -Xmx 選項會為 java 提供值 1G。 相較於其他平台,這在 Windows 上通常是必要項目。

如果 _CompileDex 目標擲回 java.lang.OutOfMemoryError,則必須指定這個屬性。

藉由變更下列項目來自訂值:

<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>

JavaOptions

指定建置檔案時要傳遞至 java.dex 命令行選項。

JarsignerTimestampAuthorityCertificateAlias

這個屬性可讓您在時間戳授權單位的金鑰存放區中指定別名。 如需詳細資訊,請參閱 Java 簽章時間戳支援 檔。

<PropertyGroup>
    <JarsignerTimestampAuthorityCertificateAlias>Alias</JarsignerTimestampAuthorityCertificateAlias>
</PropertyGroup>

JarsignerTimestampAuthorityUrl

此屬性可讓您指定時間戳授權單位服務的 URL。 這可用來確保您的 .apk 簽章包含時間戳。 如需詳細資訊,請參閱 Java 簽章時間戳支援 檔。

<PropertyGroup>
    <JarsignerTimestampAuthorityUrl>http://example.tsa.url</JarsignerTimestampAuthorityUrl>
</PropertyGroup>

LinkerDumpDependencies

布爾屬性,可產生連結器相依性檔案。 此檔案可作為 illinkanalyzer 工具的輸入使用。

名為 linker-dependencies.xml.gz 的相依性檔案會寫入項目目錄。 上。NET5/6 會寫入目錄中連結的 obj/<Configuration>/android<ABI>/linked 元件旁邊。

預設值為 [False] 。

MandroidI18n

這個 MSBuild 屬性已過時,不再受到支援。

MonoAndroidResourcePrefix

使用 的 [建置] 動作,指定從檔名開頭移除的路徑前置AndroidResource。 這是為了允許變更資源所在位置。

預設值是 Resources。 若為 Java 專案結構,請將此值變更為 res

MonoSymbolArchive

布爾值屬性,控制是否 .mSYM 要建立成品以供稍後搭配 mono-symbolicate使用,以從發行堆棧追蹤擷取“real” 檔名和行號資訊。

針對已啟用偵錯符號的「發行」應用程式,預設為 True: $(EmbedAssembliesIntoApk) 為 True,$(DebugSymbols) 為 True,且 $(Optimize) 為 True。

RunAOTCompilation

布爾值屬性,決定元件是否會預先編譯成機器碼,並包含在應用程式中。 False此屬性預設為Debug組建,預設TrueRelease組建。

這個 MSBuild 屬性會取代 Xamarin.Android 中的 $(AotAssemblies) MSBuild 屬性。 這是用於 Blazor WASM 的相同屬性。