MSBuild 屬性會控制目標的行為。
它們是在專案檔MyApp.csproj中的MSBuild PropertyGroup內指定的。
注意
在適用於 Android 的 .NET 中,應用程式與系結項目在技術上沒有區別,因此屬性會在兩者中運作。 在實務上,強烈建議建立個別的應用程式和系結專案。 主要用於系結專案的屬性記載於 MSBuild 系結專案屬性 參考指南中。
執行時範圍
一般 Android 應用程式在 .NET 11 及更新版本中以 CoreCLR 為目標。 針對 .NET 10 及更早版本的 Android 應用程式預設使用 Mono。 將 $(PublishAot) 設定為 true 會為支援的發佈組建或最佳化組建選取 NativeAOT 執行階段,且其優先順序高於 $(UseMonoRuntime)。
$(UseMonoRuntime)=true並非 .NET 11 的逃生艙口。 .NET 11 SDK 會拒絕,並顯示 NETSDK1242。
僅在針對支援 Mono 的框架時,使用 .NET 10 及更早版本的 Mono 指引。
.NET 11 Android 應用程式需要 Android API 等級 24 或更高等級。
$(SupportedOSPlatformVersion) 設定應用程式的部署最小值,並映射到 Android //uses-sdk/@android:minSdkVersion 清單中。 它不會選擇目標 SDK,也不會代表 Google Play 政策。
.NET 11 CoreCLR 執行時套件支援以下 .NET 執行時識別碼(RID)及對應的 Android 應用二進位介面(ABI):
-
android-arm:armeabi-v7a -
android-arm64:arm64-v8a -
android-x64:x86_64
Android NativeAOT 是實驗性版本,支援同樣的三種 RID。 RID 與 Android ABI 名稱及模擬器系統映像架構不同。
AdbTarget
屬性 $(AdbTarget) 會指定 Android 套件可安裝至或移除的 Android 目標裝置。
此屬性的值與
AfterGenerateAndroidManifest
在此屬性中列出的 MSBuild 目標將在內部_GenerateJavaStubs目標之後直接執行,這就是AndroidManifest.xml檔案在$(IntermediateOutputPath)中產生的地方。 如果您想要對產生的 AndroidManifest.xml 檔案進行任何修改,可以使用這個延伸點來執行此作業。
AndroidAapt2CompileExtraArgs
指定在處理 Android 資產和資源時傳遞至 aapt2 編譯 命令的命令行選項。
AndroidAapt2LinkExtraArgs
指定在處理 Android 資產和資源時傳遞至 aapt2 連結 命令的命令行選項。
AndroidAddKeepAlives
布爾值屬性,控制連結器是否會在系結專案內插入 GC.KeepAlive() 調用,以防止過早的物件集合。
預設值是 True,用於發行配置的建置。
對於使用 trimmable 類型對應的未經裁剪建置,僅會在以下情況下插入 GC.KeepAlive() 呼叫:
$(AndroidEnableLegacyCompatibilityAssemblyFixups) 也是 True。 使用 trimmable 類型映射的修剪建置不會插入這些呼叫。
AndroidAotAdditionalArguments
一個字串屬性,可讓使用 Mono 的受支援 .NET 10 及更早版本專案,在 Mono AOT 編譯器的 --aot=... 引數中傳遞其他以逗號分隔的選項。 該屬性僅在啟用 Mono AOT 編譯時使用。
一般而言,此屬性應該保留空白,但在某些特殊案例中,它可能會提供有用的彈性。
該 $(AndroidAotAdditionalArguments) 屬性與相關 $(AndroidExtraAotOptions) 屬性不同; $(AndroidAotAdditionalArguments) 包含在 --aot 選項中,而 $(AndroidExtraAotOptions) 將獨立參數直接傳遞給 Mono AOT 編譯器程序。
AndroidAotCustomProfilePath
aprofutil 應建立用來儲存 Mono AOT 剖析器資料的檔案。
預設值是 custom.aprof。
此屬性適用於受支援且使用 Mono 的 .NET 10 及更早版本專案所使用的舊版 AOT 分析目標。
AndroidAotProfilerPort
取得 Mono AOT 剖析資料時,aprofutil 應連線到的連接埠。 預設值是 9999。
此屬性適用於受支援且使用 Mono 的 .NET 10 及更早版本專案所使用的舊版 AOT 分析目標。
安卓Aot啟用延遲載入
啟用 Mono AOT 編譯組件的延遲載入,而不是在啟動時預先載入。
此特性適用於支援且使用 Mono 的 .NET 10 及更早專案。 當 Mono AOT 啟用且未包含除錯符號時, True 預設會顯示。 它不會設定 CoreCLR 或 NativeAOT。
在 .NET 6 中引進。
AndroidApkDigestAlgorithm
字串值,指定要搭配 jarsigner -digestalg使用的摘要演算法。
預設值是 SHA-256。
AndroidApkSigner附加參數
字串屬性,可讓開發人員提供 apksigner 工具的參數。
AndroidApkSigningAlgorithm
字串值,指定要搭配 jarsigner -sigalg使用的簽署演算法。
預設值是 SHA256withRSA。
AndroidApplication
布爾值,指出專案是針對Android應用程式 (True) 或Android連結庫專案 (False 或不存在)。
Android 套件內只能有一個具有 <AndroidApplication>True</AndroidApplication> 的專案。 (不幸的是,這項需求並未經過驗證,這可能會導致關於 Android 資源的細微和奇怪的錯誤。
AndroidApplicationJavaClass
當類別繼承自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 提供的型別以 Java 型別觀點實作 .NET 型別或介面時,應該如何傳播例外狀況,例如 Android.Runtime.InputStreamInvoker 和 System.IO.Stream,或 Android.Runtime.JavaDictionary 和 System.Collections.IDictionary。
Java:原始的 Java 例外狀況類型會依原樣傳播。Java表示,例如,InputStreamInvoker無法正確實作System.IO.StreamAPI,因為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為預設值。
Android綁定介面包含常數
布爾值屬性,決定是否支援介面上的系結常數,或使用建立 IMyInterfaceConsts 類別的因應措施。
預設值是 True。
Android綁定介面包含靜態與預設介面方法
布林值屬性決定介面上的預設和靜態成員是否會被支援,或是採取舊因應措施——建立一個同層級類別以包含靜態成員,例如 abstract class MyInterface。
預設值在 True .NET 6 中,而 False 舊版則為 。
Android綁定介面包含類型
布林屬性,用於判斷是否支援介面中的巢狀類型,或者可以使用建立非巢狀類型的方案,例如 IMyInterfaceMyNestedClass。
預設值在 True .NET 6 中,而 False 舊版則為 。
Android 建置應用程式套件
布林值,指出是否要建立和簽署套件(.apk)。 將此值設定為 True 等同於使用該方式
SignAndroidPackage 組建目標。
這個屬性的預設值是 False。
AndroidBundleConfigurationFile
指定要在建置 Android 應用程式套件組合時用來作為組態檔bundletool的檔名。 此檔案控制從套件組合中產生 APK 的某些層面,例如套件組合要按照哪些因素來分割以產生 APK。
適用於 Android 的 .NET 會自動設定其中一些設定,包括要保持未壓縮的擴展名清單。
只有當 $(AndroidPackageFormat) 被設定為 aab 時,這個屬性才相關。
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。JavaInterop1:實驗性值,目前為 NativeAOT 執行時的預設值。
預設值是 XAJavaInterop1。
Android依ABI創建套件
一個布林屬性,用來決定是否要為每個選取的 Android ABI(例如 .apk)各自建立一個 arm64-v8a,而不是只建立一個支援所有選取 ABI 的 .apk。
$(RuntimeIdentifiers) 中的 RIDs 會選定這些 ABI;APK 是依 ABI 個別產生,而不是依 RID 產生。
另請參閱建置 ABI 特定 APK 指南。
AndroidCreateProguardMappingFile
布爾值屬性,可控制 Proguard 對應檔案是否在建置程式中產生。
將下列內容新增至您的 csproj 會導致產生檔案,並使用 AndroidProguardMappingFile 屬性來控制最終對應檔的位置。
<AndroidCreateProguardMappingFile>True</AndroidCreateProguardMappingFile>
產生 .aab 檔案時,對應檔案會自動包含在您的套件中。 不需要手動將它上傳至Google Play商店。 使用 .apk 檔案時, AndroidProguardMappingFile 必須手動上傳 。
預設值是 True 使用 $(AndroidLinkTool)=r8 時。
AndroidDebugKeyAlgorithm
指定要用於 debug.keystore的預設演算法。 預設值是 RSA。
AndroidDebugKey有效性
指定預設的有效期以用於 debug.keystore。 預設值為 10950 或 30 * 365 或 30 years。
AndroidDebugStoreType
指定要用於的 debug.keystore金鑰存放區檔案格式。 其預設為 pkcs12。
AndroidDeviceUserId
允許在來賓或工作帳戶下部署和偵錯應用程式。 此值是您 uid 從下列 adb 命令取得的值:
adb shell pm list users
上述命令會傳回下列資料:
Users:
UserInfo{0:Owner:c13} running
UserInfo{10:Guest:404}
uid是第一個整數值。 在上述輸出中,它們是 0 和 10。
AndroidDexTool
屬性為列舉型,具有有效值 d8。 先前,在 Xamarin.Android 上支援 dx 的值。
指出在 .NET for Android 建置程式期間使用哪些 Android dex 編譯程式。
預設值是 d8。 請參閱我們的 D8 和 R8 文件。
AndroidEnableDesugar
布爾值屬性,決定是否 desugar 已啟用。 Android 目前不支援所有 Java 8 功能,預設工具鏈會在編譯器desugar的輸出上執行稱為javac的位元組程式碼轉換,以實作新的語言功能。 如果使用 ,則預設值為 False ,如果使用 ,則為$(AndroidDexTool)=dx。True$(AndroidDexTool)=d8
Android 啟用快速部署
一個布林屬性,決定是否啟用 快速部署 。 快速部署將組件安裝在應用程式套件之外,能縮短部署與重建時間。
預設值分別用於 True 除錯建置和 False 發佈建置。
設定此性質等同於設定 的 $(EmbedAssembliesIntoApk)反值。 若兩個屬性皆已設定,則以 $(EmbedAssembliesIntoApk) 為優先。
Android啟用Google Play Store檢查
bool 屬性,可讓開發人員停用下列 Google Play 商店檢查:XA1004、XA1005 和 XA1006。 停用這些檢查對不是以Google Play商店為目標且不想執行這些檢查的開發人員很有用。
AndroidEnableLegacyCompatibilityAssemblyFixups
一個布林屬性,控制未修剪建置是否修改參考組件以支援舊有綁定及資源設計器行為。 這些修改包括新增缺漏的抽象介面方法、更新舊版資源設計器參考,以及在較舊的 Xamarin.Android 繫結組件中插入 GC.KeepAlive() 呼叫。 使用 trimmable 類型對應的裁剪建置不會執行這些相容性修正,而且將此屬性設為 True 也不會為裁剪建置啟用這些修正。
當 $(AndroidTypeMapImplementation) 為 trimmable 時,預設值為 False;否則為 True。
AndroidEnableMarshalMethods
bool 屬性,決定是否啟用 LLVM 封送處理方法。
LLVM 封送處理方法是應用程式啟動時的效能優化,使用原生語言的進入點來進行 Java native 方法的註冊。
這個屬性的預設值為 False。
當 true 為 true 時,此屬性無法設為 $(PublishReadyToRun)。 將兩個屬性都設為 XA1049true 則停止建置。
已在 .NET 8 中新增。
AndroidEnableMultiDex
布林屬性,用來決定是否會在最終的 .apk 中使用 multidex 支援。
這個屬性的預設值是 False。
AndroidEnableProfiler
對於 Mono 應用程式,這是 $(EnableDiagnostics) 屬性的同義名稱。 如果是 true,則 Mono 診斷元件 libmono-component-diagnostics_tracing.so,即包含在應用程式中。
對於 .NET 11 及更新版本中的 CoreCLR 應用程式,此屬性會啟用供 dotnet-trace 和 dotnet-gcdump 等工具使用的 CoreCLR 診斷埠組態;它不會新增 Mono 診斷元件。 NativeAOT 是一個獨立的執行環境,由 選擇 $(PublishAot) ,此屬性僅記錄支援的 Android 封裝與設定行為。
這個屬性的預設值是 False。
Android啟用過時覆蓋繼承
布爾值屬性,決定系結方法是否會自動從它們覆寫的方法繼承 [Obsolete] 屬性。
.NET 8 已新增此屬性的支援。
這個屬性的預設值是 True。
AndroidEnablePreloadAssemblies
布爾值屬性,可控制應用程式封裝內所有受管理元件是否在進程啟動期間載入。
設定為 True 時,就會在流程啟動期間先載入應用程式套件內隨附的所有組件,然後再叫用任何應用程式程式碼。
設定為 False 時,組件將只會在需要時載入。
視需要載入元件可讓應用程式更快啟動,而且也與桌面 .NET 語意更一致。
若要查看省下的時間,請設定 debug.mono.log 系統屬性以包括 timing,並在 Finished loading assemblies: preloaded 內尋找 adb logcat 訊息。
使用相依性插入的應用程式或連結庫可能需要此屬性,如果它們接著需要True傳回應用程式套件組合內的所有組件,即使在一般情況下不需要該組件。
根據預設,此值為 False。
AndroidEnableProfiledAot
用於決定在預先編譯期間是否使用 Mono AOT 設定檔的布林屬性。 此規則適用於支援的 .NET 10 及更早專案,且使用 Mono,且不設定 ReadyToRun、MIBC 設定檔、動態 PGO 或 NativeAOT。
配置檔列於
@(AndroidAotProfile) 項目群組。 當啟用設定檔 AOT 時,除非 $(AndroidUseDefaultAotProfile) 是 false,否則會包含預設設定檔。 可使用 @(AndroidAotProfile) 新增自訂設定檔。
當 $(RunAOTCompilation) 且 true 未設定此屬性時,預設為 true。 因此,對於使用 Mono 的適用 Release 組建,預設值為 true。
AndroidEnableRestrictToAttributes
具有有效值obsolete 和 disable 的列舉樣式屬性。
當設定為 obsolete時,標記有 Java 批註androidx.annotation.RestrictTo的類型和成員,或位於未匯出的 Java 套件中的類型和成員,會在 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 收集器 。
這個屬性的預設值是 True。 此規則適用於支援的 .NET 10 及更早專案,且使用 Mono 且不設定 CoreCLR 或 NativeAOT 垃圾回收器。
AndroidErrorOnCustomJavaObject (自定義Java物件的Android錯誤)
布林值屬性,用於判斷型別能否在未繼承 Android.Runtime.IJavaObject 或 的情況下實作 Java.Lang.Object。
class BadType : IJavaObject {
public IntPtr Handle {
get {return IntPtr.Zero;}
}
public void Dispose()
{
}
}
當為 True 時,這類類型會產生 XA4212 錯誤,否則會產生 XA4212 警告。
這個屬性的預設值是 True。
AndroidExplicitCrunch
不再支援此屬性。
AndroidExtraAotOptions
一個字串屬性,允許支援的 .NET 10 及更早專案使用 Mono,將分號分隔的獨立參數直接傳遞給 Mono AOT 編譯器程序。 該屬性僅在啟用 Mono AOT 編譯時使用。
一般而言,此屬性應該保留空白,但在某些特殊案例中,它可能會提供有用的彈性。
屬性 $(AndroidExtraAotOptions) 與相關 $(AndroidAotAdditionalArguments) 屬性不同; $(AndroidExtraAotOptions) 傳遞獨立的程序參數,而 $(AndroidAotAdditionalArguments) 包含於逗 --aot=... 號分離選項中。
AndroidFastDeploymentType
此屬性已在 .NET 9 中移除,且已無任何作用。
Android片段類型
指定預設完整限定類型,以用於在產生佈局綁定程式碼時的所有 <fragment> 佈局元素。 預設值為標準 Android Android.App.Fragment 類型。
AndroidGenerateJniMarshalMethods
此實驗性功能在 .NET 11 中被移除。 設定屬性不會有影響。
AndroidGenerateJniMarshalMethodsAdditionalArguments(產生 JNI 縮排函數的附加參數)
此實驗性功能在 .NET 11 中被移除。 設定屬性不會有影響。
AndroidGenerateLayoutBindings
若設為,則啟用true的生成;若設為false,則完全停用。
預設值是 false。
AndroidGenerateResourceDesigner(Android產生資源設計器)
預設值是 true。 當設為 false 時,會停用 Resource.designer.cs 的生成。
AndroidHttpClientHandlerType
注意
此屬性在 .NET 11 中未被支援。 將它從專案檔案中移除,改用 UseNativeHttpHandler。
AndroidIgnoreAllJniPreload
一個布林值,若設為 true,則可免除所有原生 JNI 函式庫在應用程式啟動時被預先載入。 預設情況下,所有此類函式庫會在應用程式啟動初期的執行時階段載入,以確保其初始化的正確。 然而,在某些情況下,這可能不是理想的行為,這個特性讓你能有效地停用它。
某些必須在應用程式啟動時載入的框架函式庫不受此特性影響。
請參閱 @(AndroidNativeLibraryNoJniPreload) 以了解更精細的方法,使程式庫免於預載機制。
AndroidIncludeWrapSh
布爾值,指出Android包裝函式腳本 (wrap.sh) 是否應該封裝到 APK 中。 默認值為 false ,因為包裝函式腳本可能會大幅影響應用程式啟動和運作的方式,而且只有在需要時才包含腳本,例如偵錯或變更應用程式啟動/運行時間行為時。
腳本會被新增至專案中使用
@(AndroidNativeLibrary) 建置動作,因為它會放在與架構特定原生連結庫相同的目錄中,而且必須命名為 wrap.sh。
指定文稿路徑 wrap.sh 最簡單的方式,就是將它放在以目標架構命名的目錄中。 當您每種架構只有一個 wrap.sh 時,此方法將可成功運作。
<AndroidNativeLibrary Include="path/to/arm64-v8a/wrap.sh" />
不過,如果您的專案在每個架構中需要多於一個 wrap.sh 用於不同目的,則此方法將無法運作。
相反地,在這種情況下,可以使用 的Link元數據來指定AndroidNativeLibrary名稱:
<AndroidNativeLibrary Include="/path/to/my/arm64-wrap.sh">
<Link>lib\arm64-v8a\wrap.sh</Link>
</AndroidNativeLibrary>
如果使用Link元數據,其值中指定的路徑必須是相對於 APK 根目錄的有效原生架構特定程式庫路徑。 路徑的格式是lib\ARCH\wrap.sh,其中ARCH可以是下列其中之一:
arm64-v8aarmeabi-v7ax86_64x86
AndroidIncludeAssetPacksInPackage
此屬性會控制資產套件組建是否會自動包含在最終 .aab 檔案中。 預設為 true。
在某些情況下,使用者可能會想要釋放過渡版本。 在這些情況下,使用者不需要更新資產套件。 特別是資產套件的內容尚未變更時。 此屬性可讓使用者在不需要時略過資產套件。
在 .NET 9 中新增
Android 安裝 Java 相依性 (AndroidInstallJavaDependencies)
預設值為 true,用於命令行構建。 設定為 true時,可在執行 <InstallAndroidDependencies/> 目標時啟用 Java SDK 的安裝。
.NET 9 已新增此屬性的支援。
AndroidInstrumentation
一個字串屬性,用於指定透過 啟動應用程式時要使用的 Android dotnet run 執行器類別名稱。
當未設定此屬性時,dotnet run 會根據中繼輸出中產生的 AndroidManifest.xml 來判定要啟動的項目:
- 若
$(AndroidUseInstrumentation)為true,則會使用第一個<instrumentation/>元素。 - 否則會優先採用可啟動的
<activity/>;如果應用程式未宣告可啟動的 activity,則會使用第一個<instrumentation/>元素。 這讓您可以Android.App.Instrumentation唯一進入點為 子類別的應用程式,例如dotnet run主機。
如果應用程式都沒有宣告,則 XA1043 的建置失敗。 如果 $(AndroidUseInstrumentation) 是 true,但應用程式未宣告任何 <instrumentation/>,則建置會失敗,並顯示 XA1048。
當 Instrumentation 啟動時,dotnet run 會執行 adb shell am instrument -w -r;如果 Instrumentation 當機,或呼叫 Instrumentation.Finish() 並傳入 Result.Canceled,則會以非零結束代碼結束。 將 $(WaitForExit) 設為 -w 會捨棄 dotnet run,因此 false 會在插樁開始後立即返回,且不會回報任何結果。
-- 之後的任何引數都會作為 am instrument 的額外項目轉送給檢測工具。 形如 KEY=VALUE 的引數會變成 -e KEY VALUE,而其餘所有引數都會合併為單一的 -e args "..." extra:
dotnet run -- --filter *MyBenchmark*
會以 arguments.GetString("args") 的形式傳送給 Instrumentation.OnCreate(Bundle?)。
在 .NET 11 中引入。
AndroidJavadocVerbosity
指定在系結項目中匯入 Javadoc 文件時,C# XML 文件注釋 應該有多麼「冗長」。
需要使用<某物>
@(JavaSourceJar) 建置動作。
屬性 $(AndroidJavadocVerbosity) 是類似枚舉的類型,其可能的值為 full 或 intellisense。
-
intellisense:只發出 XML 批注:<exception/>、、<param/><returns/>、<summary/>。 -
full:發出intellisense元素,以及<remarks/>、<seealso/>和其他所有可支援的元素。
預設值是 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
具有proguard或r8兩個有效值的列舉樣式屬性。 指出哪一個程式碼壓縮工具用於 Java 程式碼。 預設值為空字串,如果proguard為$(AndroidEnableProguard),則為True。 請參閱我們的 D8 和 R8 文件。
AndroidLintEnabled
bool 屬性,可讓開發人員在封裝程式中執行Android lint 工具。
當 $(AndroidLintEnabled)=True 時,會使用下列屬性:
也可以使用下列建置動作:
如需了解 Android 工具的詳細資訊,請參閱Lint 幫助。
已啟用的 Android Lint 問題
一個字串屬性,表示要啟用的 lint 問題之逗號分隔清單。
只有當 $(AndroidLintEnabled) = True 時才會使用。
AndroidLintDisabledIssues
字串屬性,為要停用的 lint 問題所組成的逗號分隔清單。
只有當 $(AndroidLintEnabled) = True 時才會使用。
AndroidLintCheckIssues
要檢查的 lint 問題列表是一個以逗號分隔的字串屬性。
只有當 $(AndroidLintEnabled) = True 時才會使用。
注意:只會檢查這些問題。
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
具有Xamarin或GoogleV2兩個有效值的列舉樣式屬性。
這會控制 所使用的存放庫
InstallAndroidDependencies 目的是判斷哪些 Android 套件和套件版本可以使用和安裝。
Xamarin
核准清單(建議) 是 Visual Studio SDK 管理員 中的存放庫。
GoogleV2在Visual Studio SDK 管理員內是完整清單(不支援)存放庫。
如果未 $(AndroidManifestType) 設定 ,則會 Xamarin 使用 。
AndroidManifestSource
字串屬性,指定存放庫資訊清單所使用的絕對 URI 或現有的本機檔案路徑,供 the 使用的
InstallAndroidDependencies 目標。 當未設定此屬性時,會使用預設的 $(AndroidManifestType) 儲存庫清單。
例如:
<AndroidManifestSource>https://example.com/AndroidManifestFeed.xml</AndroidManifestSource>
AndroidManifestPlaceholders
AndroidManifest.xml 的鍵值替換組列表,用分號分隔,其中每個組的格式為 key=value。
例如,assemblyName=$(AssemblyName) 的屬性值定義了一個 ${assemblyName} 佔位元,然後會出現在 AndroidManifest.xml:
<application android:label="${assemblyName}"
這可讓您將建置程式中 的變數插入AndroidManifest.xml 檔案中。
AndroidMultiDexClassListExtraArgs
字串屬性,可讓開發人員在產生com.android.multidex.MainDexListBuilder檔案時將自變數傳遞至 multidex.keep 。
其中一個特定情況是您在 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 步驟成功。
AndroidNdkDirectory
此 $(AndroidNdkDirectory) 屬性指定了自訂的 Android NDK 安裝目錄。 路徑可在專案檔案或命令列中設定:
dotnet build -p:AndroidNdkDirectory=/path/to/android-ndk
若未設定此屬性,.NET for Android 會從已設定的 Android 開發環境中定位 NDK。
Android套件格式
具有apk或aab兩個有效值的列舉樣式屬性。 指出您是否要將 Android 應用程式封裝為 APK 檔案 或 Android 應用程式套件組合。 應用程式套件組合是 Release 的新格式,專供 Google Play 中的提交之用。 預設值是 apk。
當 $(AndroidPackageFormat) 的設定為 aab 時,將會一併設定 Android 應用程式套件組合所需的其他 MSBuild 屬性:
-
$(AndroidUseApkSigner)為False。 -
$(AndroidCreatePackagePerAbi)為False。
此屬性將會於 .NET 6 被淘汰。 使用者應該切換至較新的 AndroidPackageFormats。
AndroidPackageFormats
具有分號分隔並具有apk和aab有效值的屬性。
指出您是否要將 Android 應用程式封裝為 APK 檔案 或 Android 應用程式套件組合。 應用程式套件組合是 Release 的新格式,專供 Google Play 中的提交之用。
發布建置時,您可能會想要同時產生 aab 和 apk,以便散發到各種存放區。
將設定 AndroidPackageFormats 為 aab;apk 將會產生這兩者。 將設定 AndroidPackageFormats 為 aab 或 apk 只會產生一個檔案。
預設值aab;apkRelease僅適用於組建。
用於 apk 除錯速度較快,但 aab 若需要(例如測試資產包時),也能支援快速部署。
Android 套件命名政策
列舉樣式屬性,用於指定所產生 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 的 r8 proguard 規則。 這表示 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 的 r8 proguard 規則。 即使遇到特定警告,這仍允許 r8 繼續進行 dex 編譯。 默認值為 True,但可以設定為 以 False 強制執行更嚴格的行為。 如需詳細資訊, 請參閱 ProGuard 手冊 。
從 .NET 8 開始,指定 --map-diagnostics warning info。 如需詳細資訊, 請參閱 D8 和 R8 原始程式碼 。
AndroidR8JarPath
與 r8 dex-compiler 和 shrinker 搭配使用的路徑為 r8.jar。 預設值是適用於 Android 工作負載安裝的 .NET 路徑。 如需進一步的詳細資訊,請參閱有關 D8 和 R8 的文件。
Android R8 混淆模式
一個列舉型屬性,指定當 r8 為 r8 時,$(AndroidLinkTool) 如何混淆 Java 名稱。 支援的值為:
-
private-members保留 Java 類別名稱與介面名稱,以及公開或受保護的成員名稱。 私有成員及套件私有成員可被混淆,並啟用 R8 最佳化。 -
disabled關閉混淆,保留所有 Java 名稱,並使用 Android R8 的非優化預設值。
此特性不會阻止 R8 程式碼縮減。
此特性是在 .NET 10 服務版本中引入的。 在 .NET 10 中,預設為 disabled;在 .NET 11 及後續版本中,預設為 private-members。
AndroidResgenExtraArgs
指定用於在 Android 資產和資源處理時傳遞至 aapt 命令的命令行參數。
AndroidResgenFile
指定要產生之資源檔的名稱。 預設範本會將此值設定為 Resource.designer.cs。
Android 資源設計器類別修飾符
指定所生成中繼 Resource 類別的類別修飾詞。 有效值為 public 和 internal。
根據預設,這會是 public。
已在 .NET 9 中新增。
AndroidSdkBuildToolsVersion
Android SDK 建置工具套件提供 aapt 和 zipalign 工具等。 您可以同時安裝建置工具套件的多個不同版本。 如果「慣用的」建置工具版本存在,可藉由檢查及使用該版本來完成選擇要封裝的建置工具套件,如果「慣用的」版本不存在,則會使用已安裝的建置工具套件中版本最高者。
$(AndroidSdkBuildToolsVersion) MSBuild 屬性包含慣用的建置工具版本。 .NET for Android 建置系統會在 Xamarin.Android.Common.targets 中提供預設值,並且您可以在專案檔內覆寫此預設值,以選擇其他建置工具版本。例如,當已知某舊版 aapt 能正常運行時,最新版本的 aapt 可能會當機。
AndroidSigningKeyAlias(Android 簽署金鑰別名)
指定金鑰存放區中金鑰的別名。 這是在建立金鑰儲存區時所使用的 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>
注意
當 env: 設定為 $(AndroidPackageFormat) 時,不支援aab前綴詞。
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>
注意
當 env: 設定為 $(AndroidPackageFormat) 時,不支援aab前綴詞。
AndroidSigningPlatformKey(Android 簽署平台密鑰)
指定要用來簽署 apk 的金鑰檔案。
這只是用於建置system應用程式時。
AndroidSigningPlatformCert
指定要用來簽署 apk 的憑證檔案。
這只是用於建置system應用程式時。
AndroidStripILAfterAOT
bool 屬性,指定是否移除 AOT 已編譯方法的方法主體。
默認值為 false,AOT 編譯方法的方法主體將不會被移除。
當設定為 true時, $(AndroidEnableProfiledAot) 預設會設定為 false 。 這表示在支援的 .NET 8 和 .NET 9 Mono Release 版本中——$(RunAOTCompilation)預設是true這樣——所有版本都啟用了 Mono AOT。
這可能會導致應用程式大小增加。 您可以藉由在項目檔內將 $(AndroidEnableProfiledAot) 明確設定為 true 來覆寫此行為。
此特性的實驗性支援曾在 .NET 8 中加入,但在 .NET 10 中被移除。
AndroidStripNativeLibraries
一個布爾屬性,指示封裝流程從原生共享函式庫(.so 檔案)中移除除錯符號。
預設值為 , false 若有除錯符號,則在打包時會被保留。
AndroidSupportedAbis
此特性已不再支援 .NET 6 及以後版本。 移除它,改用$(RuntimeIdentifier)或$(RuntimeIdentifiers)搭配 .NET RID 而非 Android ABI 名稱。
例如,以下 .NET 11 設定包含所有支援的 CoreCLR 架構:
<PropertyGroup>
<RuntimeIdentifiers>android-arm;android-arm64;android-x64</RuntimeIdentifiers>
</PropertyGroup>
AndroidTlsProvider
這個屬性已經過時,不應使用。
AndroidTypeMap 實作
一個 enum 風格的屬性,用來選擇型別映射實作。
有效值為 llvm-ir 和 trimmable。
當 $(PublishAot) 是 true 時,預設值為 trimmable;否則為 llvm-ir。
AndroidUseApkSigner
布林屬性,可讓開發人員使用 apksigner 工具,而不是 jarsigner。
AndroidUseDefaultAotProfile
一個 bool 屬性,允許開發者抑制預設 Mono AOT 設定檔的使用。
當 $(AndroidEnableProfiledAot) 是 true 時,預設配置檔會被使用,除非此屬性被設定為 false。
此特性適用於支援且使用 Mono 的 .NET 10 及更早專案。 它不會為 CoreCLR 選擇 MIBC 設定檔或動態 PGO。
AndroidUseDesignerAssembly
bool 屬性,用於控制建置系統是產生 _Microsoft.Android.Resource.Designer.dll 檔案,還是 Resource.Designer.cs 檔案。 其優點是較小的應用程式和更快的啟動時間。
預設值在 true .NET 8 中。
作為 NuGet 作者,如果您想要維持向後相容性,建議您發布三個版本的組件。
一個用於MonoAndroid,一個用於 net6.0-android,另一個用於 net8.0-android。 您可以使用 Xamarin.Legacy.Sdk 來執行此動作。 只有在您的 NuGet 套件庫專案使用或透過相依項使用 AndroidResource 項目時,才需要此要求。
<TargetFrameworks>monoandroid90;net6.0-android;net8.0-android</TargetFrameworks>
或者關閉此設定,直到傳統版和 net7.0-android 都已經不再被推薦使用為止。
選擇關閉此設定的 .NET 8 專案將無法取用使用它的參考。 如果您嘗試在未啟用此功能的專案中使用已啟用此功能的元件,您將會收到 XA1034 建置錯誤。
已在 .NET 8 中新增。
AndroidUseInstrumentation
一個布林值屬性,表示應用程式是透過其 <instrumentation/> 元素啟動,而非透過 <activity/>(例如測試或 BenchmarkDotNet 主機)。
當 true、dotnet run 從產生的 $(AndroidInstrumentation) 解析出 AndroidManifest.xml,並以 adb shell am instrument 啟動它時,即使應用程式也宣告了可啟動的 activity。
當 $(EnableMSTestRunner) 為 true 時,預設值為 true;否則為 false。
請注意,沒有可啟動的 <activity/> 的應用程式,無論此屬性如何設定,都會透過其 <instrumentation/> 啟動。
在 .NET 11 中引入。
AndroidUseInterpreter
一個布林屬性,使 MonoVM .apk 包含 Mono 直譯器,而非一般的 JIT。 對於使用 Mono 的偵錯組建,預設值為 False;否則為 True。
此特性適用於支援且使用 Mono 的 .NET 10 及更早專案。 這不是 CoreCLR 設定,Android 在 .NET 11 及以後版本中沒有直譯器。
實驗。
AndroidUseLegacyVersionCode
布林值屬性,允許開發人員將版本代碼計算還原至其在 Xamarin.Android 8.2 之前的舊行為。 這應該「僅」針對 Google Play 商店中擁有現有應用程式的開發人員使用。 強烈建議使用新的 $(AndroidVersionCodePattern) 屬性。
AndroidUseManagedDesignTimeResourceGenerator
布林值屬性,會切換設計時間建置以使用受控資源解析器,而不是 aapt。
Android 使用協商驗證 (AndroidUseNegotiateAuthentication)
布爾值屬性,可在AndroidMessageHandler中啟用對NTLMv2/Negotiate驗證的支持。 預設值為 [False] 。
已在 .NET 7 中新增。
AndroidUseSharedRuntime
這個屬性已經過時,不應使用。
AndroidVersionCode
可以在/manifest/@android:versionCode檔案中用作AndroidManifest.xml替代方案的 MSBuild 屬性。 若要加入此功能,您必須開啟 <GenerateApplicationManifest>true</GenerateApplicationManifest>。
這將是 .NET 6 中的預設值。
如果使用 $(AndroidCreatePackagePerAbi) 和 $(AndroidVersionCodePattern) ,則會忽略這個屬性。
@android:versionCode 是每個Google Play版本必須遞增的整數值。 請參閱Android 文件以了解有關/manifest/@android:versionCode的進一步要求。
AndroidVersionCodePattern
字串屬性,可讓開發人員自訂 manifest 指令清單中的 versionCode 項目。
如需有關決定 的資訊,請參閱versionCode。
一些範例,如果 abi 是 armeabi 且資訊清單中的 versionCode 是 123,則在 {abi}{versionCode} 為 True 時,1123 會產生 $(AndroidCreatePackagePerAbi) 的 versionCode,否則會產生 123 的值。
如果 abi 是 x86_64 且資訊清單中的 versionCode 是 44。 當 544 為 True 時,這會產生 $(AndroidCreatePackagePerAbi),否則會產生 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
- 2 –
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
可以在/manifest/@package檔案中用作AndroidManifest.xml替代方案的 MSBuild 屬性。 若要加入此功能,您必須開啟 <GenerateApplicationManifest>true</GenerateApplicationManifest>。
這將是 .NET 6 中的預設值。
請參閱Android 文件以了解有關/manifest/@package的進一步要求。
應用程式標題
可以在/manifest/application/@android:label檔案中用作AndroidManifest.xml替代方案的 MSBuild 屬性。 若要加入此功能,您必須開啟 <GenerateApplicationManifest>true</GenerateApplicationManifest>。
這將是 .NET 6 中的預設值。
請參閱Android 文件以了解有關/manifest/application/@android:label的進一步要求。
應用程式版本
可以在/manifest/@android:versionName檔案中用作AndroidManifest.xml替代方案的 MSBuild 屬性。 若要加入此功能,您必須開啟 <GenerateApplicationManifest>true</GenerateApplicationManifest>。
這將是 .NET 6 中的預設值。
請參閱Android 文件以了解有關/manifest/@android:versionName的進一步要求。
AotAssemblies
一個布林屬性,決定 Mono 是否會預先編譯組合檔成原生程式碼並包含在應用程式中。
若未指定,其有效值遵循 $(RunAOTCompilation):在偵錯組建中為 False,而在支援的 .NET 10 及更早版本目標框架上使用 Mono 的發行組建中為 True。
在 .NET 7 中已被取代。 對於使用 Mono 的受支援 .NET 10 和更早版本專案,請改為移轉至 $(RunAOTCompilation) MSBuild 屬性。
指定 $(AotAssemblies),包括將其設為 false,會發出 XA1029 警告。
對於 CoreCLR 或 NativeAOT,將其設為 true 時,若 未設定(或以其他方式評估為 $(RunAOTCompilation)),就會導致使建置停止的 true 錯誤,因為預設邏輯會將 $(AotAssemblies) 轉送給 $(RunAOTCompilation)。
對於 .NET 11 CoreCLR 專案,請移除$(AotAssemblies)但不加 $(RunAOTCompilation)。 CoreCLR 不使用 Mono AOT 管線。
AProfUtilExtraOptions
在支援的 .NET 10 及更早版本專案中使用舊版 Mono AOT 分析目標時,可傳遞給 aprofutil 的額外選項。
在建置Android資產包之前
在這個屬性中列出的 MSBuild 目標將會在建置 AssetPack 項目之前直接執行。
在 .NET 9 中新增
BeforeGenerateAndroidManifest
這個屬性中列出的 MSBuild 目標會在 之前 _GenerateJavaStubs直接執行。
組態
指定要使用的組建組態,例如「偵錯」或「發行」。 組態屬性可用來決定其他會決定目標行為之屬性的預設值。 您可以在 IDE 內建立其他組態。
根據預設,組 Debug 態會產生
Install 和
SignAndroidPackage 目標建立較小的Android套件,需要有其他檔案和套件才能運作。
默認 Release 組態會導致
Install 和
SignAndroidPackage目標是建立獨立的 Android 套件,而且不需安裝任何其他套件或檔案即可使用。
調試符號
布林值,決定 Android 套件是否可除錯,並結合 $(DebugType) 屬性。
可偵錯套件包含偵錯符號、將 //application/@android:debuggable 屬性 設定為 true,並自動新增
INTERNET 權限,讓調試程式可以附加至程序。 如果 DebugSymbols 是 True且DebugType 是空字串或 Full,則應用程式可偵錯。
除錯類型
指定要 在組建中產生之偵錯符號 的類型,這也會影響應用程式是否可偵錯。 可能的值包括:
完整:產生完整符號。 如果
DebugSymbolsMSBuild 屬性也是True,然後應用程式套件是可偵錯的。PdbOnly:產生 "PDB" 符號。 應用程式套件無法偵錯。
如果 DebugType 未設定或者是空字串,則 DebugSymbols 屬性會控制應用程式是否可偵錯。
裝置
指定使用 dotnet run --device <Device> 或能與裝置互動的 MSBuild 目標時,要鎖定哪個 Android 裝置或模擬器(例如 Run、Install 或 Uninstall)。
該值必須是完整的裝置序號或識別碼,且由 adb devices返回。 例如,若裝置序列為 emulator-5554,你必須使用 -p:Device=emulator-5554。
當設定時,此屬性用來初始化 AdbTarget 該屬性,值為 -s "<Device>"。
欲了解更多關於裝置選擇的資訊,請參閱 .NET SDK 裝置選擇規範。
診斷位址
由dotnet-dsrouter提供的數值,例如127.0.0.1,或是$(DiagnosticConfiguration)或DOTNET_DiagnosticPorts的IP位址成分。
當此屬性非空 $(AndroidEnableProfiler) 且未明確設定為 false時,它隱含地啟用 Android 診斷。
對於 CoreCLR,產生的 TCP 端點通常會保留在迴送介面上,並供 dotnet-dsrouter 使用。 對於 Android 模擬器,使用 10.0.2.2 來連線到開發機器;對於實體裝置,則使用 127.0.0.1,並透過 dotnet-dsrouter server-server --tcp-server 127.0.0.1:9000 --forward-port Android 啟用 Android 連接埠轉送。
預設為 127.0.0.1。
診斷配置
提供的dotnet-dsrouterDOTNET_DiagnosticPorts值,例如:
127.0.0.1:9000,connect,suspend127.0.0.1:9000,connect,nosuspend
當未明確設定診斷時,導出的預設值為位址 127.0.0.1、埠 9000、 DiagnosticSuspend=false及 DiagnosticListenMode=connect。
請注意,如果需要將,字元傳遞到命令列中,需要使用 %2c 進行轉義才能正確傳遞給 dotnet build。
dotnet build -c Release -p:DiagnosticConfiguration=127.0.0.1:9000%2cconnect%2csuspend
這會自動設定 DOTNET_DiagnosticPorts 應用程式內封裝的環境變數。 在 connect 模式下,Android 執行階段會連線到已設定的 TCP 端點,並由 dotnet-dsrouter 將該連線橋接至本機診斷工具。 端點未經過認證且未加密,因此保持在本地開發介面上。
設定此屬性或以下任一元件屬性,隱含啟用 Android 診斷,當 $(AndroidEnableProfiler) 未明確設定為 false時。
診斷接聽模式
由dotnet-dsrouter提供的值,例如connect,或$(DiagnosticConfiguration)或DOTNET_DiagnosticPorts的聆聽模式分量。
當此屬性非空 $(AndroidEnableProfiler) 且未明確設定為 false時,它隱含地啟用 Android 診斷。
預設為 connect。
診斷埠
由dotnet-dsrouter提供的值,例如9000,或$(DiagnosticConfiguration)或DOTNET_DiagnosticPorts的埠分量。
當此屬性非空 $(AndroidEnableProfiler) 且未明確設定為 false時,它隱含地啟用 Android 診斷。
預設為 9000。
診斷暫停
由dotnet-dsrouter提供的布林值,例如true/suspend 或 false/nosuspend,是$(DiagnosticConfiguration) 或DOTNET_DiagnosticPorts的一個組成部分。
當此屬性非空 $(AndroidEnableProfiler) 且未明確設定為 false時,它隱含地啟用 Android 診斷。
預設為 false。
EmbedAssembliesIntoApk
布爾值屬性,決定應用程式元件是否應該內嵌到應用程式套件中。
此屬性是 $(AndroidEnableFastDeployment) 的反向屬性。 新專案應該用 $(AndroidEnableFastDeployment) 來控制快速部署。 若兩個屬性皆已設定,則以 $(EmbedAssembliesIntoApk) 為優先。
如果是發行組建,這個屬性應該是 True,如果是偵錯組建,則應該是 False。 如果快速部署不支援目標裝置,則在偵錯組建中,這個屬性可能需為 True。
啟用當機報告
一個布林屬性,當使用 CoreCLR 或 NativeAOT 執行時,將環境變數設定 DOTNET_EnableCrashReport 為 1 。 這能在應用程式啟動時產生崩潰報告。
此屬性預設為 False,當 $(UseMonoRuntime) 為 True 時,會忽略此屬性。
啟用診斷
Android SDK 或 MSBuild 的特性,能啟用所選執行環境的診斷功能。 它是用於 Mono 應用程式的 $(AndroidEnableProfiler) 同義詞。
對於 CoreCLR,它會啟用 dotnet-trace 和 dotnet-gcdump 所使用的診斷連接埠設定。
$(EnableDiagnostics) 與 CoreCLR 執行環境變數 DOTNET_EnableDiagnostics不同。 前者由 Android SDK/MSBuild 目標進行評估;後者在作為環境變數提供時,會由執行階段讀取。
這個屬性的預設值是 False。
EnableLLVM
一個布林屬性,用來決定 Mono AOT 編譯器在以預先編譯方式將組件編譯為原生程式碼時,是否使用 LLVM。
必須安裝 Android NDK,才能建置已啟用此屬性的專案。
這個屬性的預設值是 False。
此屬性適用於支援的 .NET 10 及更早版本、使用 Mono 的專案,且僅在 $(RunAOTCompilation) 為 True 時才會影響編譯。
將此屬性設為 true 時,對於 CoreCLR 或 NativeAOT,系統會將其重設為 false,並以 XA1044 停止建置。
EnableMSTestRunner
一個布林屬性,使 MSTest 執行者 能用於 Android 測試專案。 當 設定為 true時, dotnet run 應用程式會透過 am instrument 而非 am start啟動,並透過 Android 的儀器協定報告測試結果。
這個屬性的預設值是 False。
在 .NET 11 中引入。
啟用 Proguard
布林屬性,決定是否在封裝過程中運行 Proguard,以連結 Java 程式碼。
這個屬性的預設值是 False。
當使用True時,會使用@(ProguardConfiguration)檔案來控制proguard的執行。
EventSource支援
當設為 false 時,會禁用經修剪的 Android 應用程式的 .NET EventSource 支援。 停用此功能會防止 .NET 診斷工具等 dotnet-counters 運作,但會減少應用程式大小。
除非啟用了false或Release,否則在$(EnableDiagnostics)模式下預設設為$(AndroidEnableProfiler)。
產生應用程式清單
啟用或停用下列 MSBuild 屬性,以發出最終 AndroidManifest.xml 檔案中的值:
預設值 $(GenerateApplicationManifest) 為 true。
JavaMaximumHeapSize(Java最大堆大小)
指定在封裝過程中建置檔案時要使用的 java 參數值。 如果未指定,則 -Xmx 選項會為 java 提供值 1G。 相較於其他平台,這在 Windows 上通常是必要項目。
如果 _CompileDex 目標擲回 java.lang.OutOfMemoryError,則必須指定這個屬性。
自訂值的方法是更改:
<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>
JavaOptions
指定建置檔案時要傳遞至 java 的 .dex 命令行選項。
JarsignerTimestampAuthorityCertificateAlias
這個屬性可讓您在時間戳授權單位的金鑰存放區中指定別名。 如需詳細資訊,請參閱 Java 簽章時間戳支援 檔。
<PropertyGroup>
<JarsignerTimestampAuthorityCertificateAlias>Alias</JarsignerTimestampAuthorityCertificateAlias>
</PropertyGroup>
JarsignerTimestampAuthorityUrl
此屬性可讓您指定指向時間戳驗證機構服務的網址。 這可用來確保您的 .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 屬性已過時,不再受到支援。
MauiEnableFullReadyToRun
適用於使用 CoreCLR,且以 Release 組態建置並啟用 ReadyToRun 的 .NET MAUI Android 應用程式的布林屬性。
當此屬性未設定或 false時,MAUI 會使用部分 ReadyToRun 搭配其預設 MIBC 設定檔。 將此屬性設為 true 啟用完整的 ReadyToRun。 當 $(PublishReadyToRun) 為 時 false,此性質無影響。
完整 ReadyToRun 會增加應用程式與下載容量,但因為有更多方法被預先編譯,因此有可能提升執行效能。
欲了解更多關於 .NET MAUI 中的 CoreCLR 與 ReadyToRun 的資訊,請參閱 .NET MAUI 中的執行時與編譯。
指標支援
當設定為 false時,會停用 .NET 從精簡的 Android 應用程式支援 Metrics 的功能。 停用此功能會防止 API 等 System.Diagnostics.Metrics 運作,但有利於減少應用程式大小。
除非啟用了false或Release,否則在$(EnableDiagnostics)模式下預設設為$(AndroidEnableProfiler)。
MonoAndroidAssetPrefix
指定 路徑前綴,用以移除具有 AndroidAsset 建置動作的檔名開頭。 這是為了允許變更資源所在位置。
預設值是 Assets。 若為 Java 專案結構,請將此值變更為 assets。
MonoAndroidResourcePrefix
指定 路徑前綴,用以移除具有 AndroidResource 建置動作的檔名開頭。 這是為了允許變更資源所在位置。
預設值是 Resources。 若為 Java 專案結構,請將此值變更為 res。
MonoSymbolArchive
注意
這是來自 Xamarin.Android 的舊有 MSBuild 屬性。 在 .NET 6 及以上版本中不可用。
布爾值屬性,用於控制是否建立 .mSYM 工件以供稍後與 mono-symbolicate 搭配使用,以從釋出堆疊追蹤中擷取「實際的」檔名和行號資訊。
對於已啟用除錯符號的「Release」應用程式,預設為 True: $(EmbedAssembliesIntoApk) 為 True,
$(DebugSymbols) 為 True,且
$(Optimize) 為 True。
發佈 ReadyToRun
一個布林屬性,控制在使用 CoreCLR 時,組件是否編譯成 ReadyToRun 格式。 ReadyToRun 組合語言同時包含 MSIL 與原生程式碼。 這能提升應用程式啟動時間同時保持 JIT 相容性,但會增加應用程式與下載容量。
對於使用 CoreCLR 的 Android 應用程式,此屬性在 Release 組態中的預設值為 true,而在 Debug 組態中預設不會啟用。 使用 Mono 或 NativeAOT 時不適用 ReadyToRun。
ReadyToRun 需要裁剪。 如果 $(PublishTrimmed) 不是 true,Android 版 .NET 會停用 PublishReadyToRun 和 $(PublishReadyToRunComposite),並發出 XA0119 警告。
ReadyToRun 編譯預設是複合格式。 參見 $(PublishReadyToRunComposite)。
.NET MAUI 也使用部分 ReadyToRun 與預設 MIBC 設定檔。 請參閱 $(MauiEnableFullReadyToRun) 以選擇啟用完整 ReadyToRun。
欲了解更多資訊,請參閱 .NET MAUI 中的執行時與編譯。
發行 ReadyToRun 複合式映像檔
一個布林屬性,用來控制 ReadyToRun 編譯是否將應用程式組件合併成複合映像。 Composite ReadyToRun 允許跨組裝優化,但可能會增加建置時間。
對於使用 CoreCLR 的 Android 應用程式,此屬性預設為 true 當 $(PublishReadyToRun) 是 true時。
ReadyToRun(包括複合式 ReadyToRun)需要 $(PublishTrimmed) 為 true。
RunAOTCompilation
一個布林屬性,用來決定是否使用 Mono AOT 編譯器將組件以 AOT(Ahead-of-Time)方式編譯,並包含於使用 Mono 執行階段的應用程式中。 此屬性對於 Debug 組建預設為 False,而對於在支援的 .NET 10 和更早版本目標架構上使用 Mono 的 Release 組建,預設為 True。
這個 MSBuild 屬性會取代 Xamarin.Android 中的 $(AotAssemblies) MSBuild 屬性。 這是用於 Blazor WASM 的相同屬性。
此屬性無法啟用 ReadyToRun 或 NativeAOT。 若將其設為用於 CoreCLR 或 NativeAOT 的 true,則會將其重設為 false,並以 XA1044 停止建置。
對 CoreCLR 將其設為 false 也會以 XA1044 停止建置,而不是默默忽略這個屬性。 從 .NET 11 開始,移除$(RunAOTCompilation)並將$(PublishReadyToRun)設為false,以停用 ReadyToRun(R2R)AOT 編譯。
NativeAOT 仍允許設定 $(RunAOTCompilation) 為 false 。
使用單一運行時間
一個布林屬性,用來控制 Android 應用程式在受支援的 .NET 10 及更早版本目標上,是否使用 Mono 執行階段而非 CoreCLR。
將此屬性設定為 true 使用 Mono 或 false 對這些目標使用 CoreCLR。
$(PublishAot) 在設定為 true 時,會優先採用 NativeAOT 用於受支援的發佈或最佳化建置。
這個屬性在 .NET 10 及更早版本中預設為 Monotrue,因此 Android 應用程式使用 Mono。 在 .NET 11 和更新版本中,預設為 false,因此 Android 應用程式會使用 CoreCLR,而明確指定 true 值會遭到拒絕,並顯示 NETSDK1242。
欲了解更多資訊,請參閱 .NET MAUI 中的執行時與編譯。
等待退出
一個布林屬性,用來控制啟動 Android 應用程式時的 dotnet run 行為。
當 $(WaitForExit) 不是 false(預設)時,dotnet run將:
- 啟動 Android 應用程式
- 將
logcat串流輸出過濾到應用程式的流程中 - 等待應用程式退出或使用者按下 Ctrl+C
- 按下 Ctrl+C 時強制停止應用程式
當 $(WaitForExit) 是 false時, dotnet run 則會直接啟動應用程式並立即返回,不會等待應用程式退出或串流任何輸出。
此屬性也會控制當應用程式透過其 -w 啟動時,是否會將 adb shell am instrument 傳遞給 $(AndroidInstrumentation):
$(WaitForExit) |
啟動 <activity/> |
啟動 <instrumentation/> |
|---|---|---|
true (預設值) |
adb shell am start -S -W |
adb shell am instrument -w -r |
false |
adb shell am start -S |
adb shell am instrument -r |
因為 adb shell am instrument 只有在檢測作業完成後才會回報結果,所以如果您需要檢測輸出或有意義的結束代碼,$(WaitForExit) 就不得為 false。 這對於執行測試或 BenchmarkDotNet 主機等情境很重要,因此 dotnet test 總是使用預設值。
在 .NET 11 中引入。