デバッグ可能な属性

デバッグできるようにするために、Android では Java Debug Wire Protocol (JDWP) がサポートされます。 これは、JVM と通信する ADB などのツールを許可するテクノロジです。 JDWP は開発時には重要ですが、アプリケーションを公開する前に無効にする必要があります。

JDWP は、Android アプリケーションの android:debuggable 属性の値によって構成できます。 Xamarin.Android でこの属性を設定するには、次の 3 つの方法の "いずれか" を選択します。

AndroidManifest.xml

AndroidManifext.xml ファイルを作成するか開き、そこで android:debuggable 属性を設定します。 デバッグを有効にしたリリース ビルドを提供しないように、特に注意してください。

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

Application クラス属性を追加する

Xamarin.Android アプリに [Application] 属性を持つクラスがある場合は、その属性を [Application(Debuggable = true)] に更新します。 無効にするには、これを false に設定します。

アセンブリ属性を追加する

Xamarin.Android アプリに [Application] クラス属性がまだない場合は、C# ファイルにアセンブリ レベル属性 [assembly: Application(Debuggable=true)] を追加します (Properties\AssemblyInfo.cs など)。 無効にするには、これを 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.xmlApplicationAttribute のいずれも存在しない場合)、android:debuggable 属性の値は、デバッグ シンボルが生成されているかどうかによって異なります。 デバッグ シンボルが存在する場合は、Xamarin.Android によって android:debuggable 属性が自動的に true に設定されます。

警告

android:debuggable 属性の値は、必ずしもビルド構成によって異なるわけではありません。 リリース ビルドでは、android:debuggable 属性を true に設定することができます。 属性を使用してこの値を設定する場合は、コンパイラ ディレクティブで属性をラップすることを選択できます。

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