可调试属性

若要进行调试,Android 需支持 Java 调试线协议 (JDWP)。 这是一种允许 ADB 等工具与 JVM 通信的技术。 尽管在开发期间 JDWP 非常重要,仍应在发布应用程序之前将其禁用。

JDWP 可以由 Android 应用程序中 android:debuggable 属性的值配置。 选择以下三种方法之一在 Xamarin.Android 中设置此属性

AndroidManifest.xml

创建或打开 AndroidManifext.xml 文件,并在其中设置 android:debuggable 属性。 请特别注意,不要交付启用了调试的发行版本。

 	<application android:label="@string/app_name"
               android:debuggable="true"
               android:icon="@mipmap/appicon">
    ...
	</application>

添加应用程序类属性

如果 Xamarin.Android 应用具有一个包含 [Application] 属性的类,请将该属性更新为 [Application(Debuggable = true)]。 将其设置为 false 以禁用。

添加程序集属性

如果 Xamarin Android 应用还没有 [Application] 类属性,请在 c# 文件(例如 Properties\AssemblyInfo.cs)中添加程序集级别属性 [assembly: Application(Debuggable=true)]。 将其设置为 false 以禁用。

总结

如果 AndroidManifest.xmlApplicationAttribute 均存在,则 AndroidManifest.xml 的内容将优先于 ApplicationAttribute 所指定的内容。

如果同时添加类属性和程序集属性,将出现编译器错误

"Error The "GenerateJavaStubs" task failed unexpectedly.
System.InvalidOperationException: Application cannot have both a type with an [Application] attribute and an [assembly:Application] attribute."

默认情况 - 如果既没有 AndroidManifest.xml 也没有 ApplicationAttribute,则 android:debuggable 属性的值将取决于是否生成了调试符号。 如果调试符号存在,则 Xamarin.Android 会将 android:debuggable 属性设为 true

警告

android:debuggable 属性的值不一定依赖于生成配置。 发行版本可能会将 android:debuggable 属性设为 true。 如果使用属性设置此值,则可以选择在编译器指令中包装属性:

#if DEBUG
[Application(Debuggable = true)]
#else
[Application(Debuggable = false)]
#endif