多くの場合、Java パッケージ名は、追加のプレフィックスや大文字と小文字の違いなどの問題により、C# 名前空間の規則と一致しません。
たとえば、Java パッケージ名 com.microsoft.streamwriters は、バインド プロセスによって名前空間が Pascal ケースに自動的に変換されるため、 Com.Microsoft.Streamwriters に自動的に変換されます。 しかし、より良い適合は Microsoft.StreamWritersでしょう。
これを行うには、プロジェクト ファイルに <AndroidNamespaceReplacement> 項目を追加します。
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft.streamwriters' Replacement='Microsoft.StreamWriters' />
</ItemGroup>
Java パッケージは従来の metadataを使用して名前を変更することもできますが、多くの類似したパッケージの名前を変更するのは面倒な場合があります。
<attr path="/api/package[@name='com.microsoft.accessibility']" name="managedName">Microsoft.Accessibility</attr>
<attr path="/api/package[@name='com.microsoft.content']" name="managedName">Microsoft.Content</attr>
<attr path="/api/package[@name='com.microsoft.core']" name="managedName">Microsoft.Core</attr>
...
<AndroidNamespaceReplacement>を使用すると、プロジェクト ファイルに配置された同じ MSBuild 変換を、一致するすべてのパッケージに適用できます。
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft' Replacement='Microsoft' />
</ItemGroup>
仕様
これらの置換は@managedName属性を指定しない<package>要素に対してのみ実行されます。
@managedName使用されている場合は、必要な正確な名前を指定することを選択します。それ以上処理されることはありません。
未使用のメタデータとは異なり、これらの置換では、未使用の場合は警告は発生しません。
大文字小文字の区別
置換は 以降 パスカル大文字と小文字の自動変換で実行されますが、比較では大文字と小文字が区別されません。
したがって、次の両方が同等です。
<AndroidNamespaceReplacement Include='Androidx' Replacement='AndroidX' />
<AndroidNamespaceReplacement Include='androidx' Replacement='AndroidX' />
単語の境界
置換は、完全に単語 (名前空間部分) に対してのみ行われます。
したがって
<AndroidNamespaceReplacement Include='Com' Replacement='' />
Com.Google.Libraryにのみ一致し、Common.Google.LibraryやGoogle.Imaging.Dicomには一致しません。
複数の完全な単語を使用できます。
<AndroidNamespaceReplacement Include='Com.Google' Replacement='Google' />
<AndroidNamespaceReplacement Include='Com.Androidx' Replacement='Microsoft.AndroidX' />
Word の位置
名前空間の先頭を制限する場合は.を前に追加し、末尾を制限する場合は.を後に追加することで、単語部分の一致を制限できます。
<AndroidNamespaceReplacement Include='Androidx.' Replacement='Microsoft.AndroidX' />
は Androidx.Coreに一致しますが、 Square.OkHttp.Androidxには一致しません。
同様に、
<AndroidNamespaceReplacement Include='.Compose' Replacement='ComposeUI' />
は Google.AndroidX.Composeに一致しますが、 Google.Compose.Writerには一致しません。
. を先頭と末尾に追加すると、完全一致します。
<AndroidNamespaceReplacement Include='.Androidx.' Replacement='Microsoft.AndroidX' />
は Androidxに一致しますが、 Google.Androidx.Coreには一致しません。
交換注文
置換は <ItemGroup>で指定された順序で実行されますが、このグループに異なる時間に追加すると、意図しない順序になる可能性があります。
置換は順番に実行され、複数の置換が 1 つの名前空間に影響する可能性があります。
<AndroidNamespaceReplacement Include='Androidx' Replacement='Microsoft.AndroidX' />
<AndroidNamespaceReplacement Include='View' Replacement='Views' />
Androidx.ViewがMicrosoft.AndroidX.Viewsに変更されます。
メタデータとの関係
技術的に @(AndroidNamespaceReplacement) は、 <metadata>の特殊なケースとして実装され、 metadata.xml ファイルに直接配置できます。
必要に応じてメタデータ フォームを作成します。
つまり、MSBuild 項目は次のようになります。
<ItemGroup>
<AndroidNamespaceReplacement Include='com.microsoft' Replacement='Microsoft' />
</ItemGroup>
代わりに、次のように metadata.xml に配置できます。
<metadata>
<ns-replace source='com.microsoft' replacement='Microsoft' />
</metadata>