次の方法で共有


名前空間のカスタマイズ

多くの場合、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.LibraryGoogle.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.ViewMicrosoft.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>