組建屬性
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.InputStreamInvoker
和 System.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
的預設有效性。 預設值為 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 功能,而預設工具鏈會在編譯程式的輸出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.Object
或 Java.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
如果設定為 ,則啟用配置程式代碼後置的產生,如果設定false
為 true
,則完全停用。
預設值是 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
:使用 ManagedHttpMessageHandler
。對應至 Visual Studio 屬性頁中的 Managed 選項。
注意
在 .NET 6 中,您指定的類型不得為 Xamarin.Android.Net.AndroidClientHandler
或 System.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.sh
ARCH
下列其中之一:
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)
類似列舉,其可能值為 full
或 intellisense
:
intellisense
:只發出 XML 批注:<exception/>
、、<returns/>
<param/>
、<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
具有 或 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 屬性:
$(AndroidUseAapt2)
為True
。$(AndroidUseApkSigner)
為False
。$(AndroidCreatePackagePerAbi)
為False
。
此屬性將會針對 .net 6 淘汰。 使用者應該切換至較新的 AndroidPackageFormats
。
AndroidPackageFormats
具有和 aab
有效值的apk
分號分隔屬性。
指出您是否要將 Android 應用程式封裝為 APK 檔案 或 Android 應用程式套件組合。 應用程式套件組合是 Release
的新格式,專供 Google Play 中的提交之用。
建置發行組建時,您可能會想要同時產生 和 和 aab
apk
,以便散發到各種存放區。
將設定 AndroidPackageFormats
為 aab;apk
將會產生這兩者。 將設定 AndroidPackageFormats
為 aab
或 apk
只會產生一個檔案。
預設值aab;apk
Release
僅適用於組建。
建議您繼續使用進行偵 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
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 的文件。
AndroidResgenExtraArgs
指定要在處理 Android 資產和資源時傳遞至 aapt 命令的命令行選項。
AndroidResgenFile
指定要產生之資源檔的名稱。 預設範本會將此值設定為 Resource.designer.cs
。
AndroidResourceDesignerClassModifier
指定產生的中繼 Resource
類別的類別修飾詞。 有效值為 public
和 internal
。
根據預設,這會是 public
。
已在 .NET 9 中新增。
AndroidSdkBuildToolsVersion
Android SDK 建置工具套件提供 aapt 和 zipalign 工具等。 您可以同時安裝建置工具套件的多個不同版本。 如果「慣用的」建置工具版本存在,可藉由檢查及使用該版本來完成選擇要封裝的建置工具套件,如果「慣用的」版本不存在,則會使用已安裝的建置工具套件中版本最高者。
$(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 建立版本代碼。
一些範例,如果 abi
是 armeabi
且資訊清單中的 versionCode
是 123
,則在 $(AndroidCreatePackagePerAbi)
為 True 時,{abi}{versionCode}
會產生 1123
的 versionCode,否則會產生 123 的值。
如果 abi
是 x86_64
且資訊清單中的 versionCode
是 44
。 當 $(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
- 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
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
態會產生 Install
和 SignAndroidPackage
目標建立較小的Android套件,需要有其他檔案和套件才能運作。
默認 Release
組態會導致 Install
和 SignAndroidPackage
目標是建立獨立的 Android 套件,而且不需安裝任何其他套件或檔案即可使用。
DebugSymbols
布爾值,決定Android套件是否可偵錯,結合 $(DebugType)
屬性。
可偵錯套件包含偵錯符號、將 //application/@android:debuggable
屬性 設定為 true
,並自動新增 INTERNET
許可權,讓調試程式可以附加至進程。 如果 DebugSymbols
是 True
且 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
組建,預設True
為Release
組建。
這個 MSBuild 屬性會取代 Xamarin.Android 中的 $(AotAssemblies)
MSBuild 屬性。 這是用於 Blazor WASM 的相同屬性。