<マニフェスト>

構文:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="string"
          android:sharedUserId="string"
          android:sharedUserLabel="string resource" 
          android:sharedUserMaxSdkVersion="integer"
          android:versionCode="integer"
          android:versionName="string"
          android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
    ...
</manifest>

上位の要素:
なし

含める必要がある要素:
<application>
格納可能な下位の要素:
<compatible-screens>
<instrumentation>
<permission>
<permission-group>
<permission-tree>
<queries>
<supports-gl-texture>
<supports-screens>
<uses-configuration>
<uses-feature>
<uses-permission>
<uses-permission-sdk-23>
<uses-sdk>

説明:
AndroidManifest.xml ファイルのルート要素。<application> 要素を含める必要があり、xmlns:android 属性と package 属性を指定する必要があります。
属性:
xmlns:android
Android 名前空間を定義します。この属性は常に "http://schemas.android.com/apk/res/android" に設定されます。
package
APK のマニフェスト ファイルに含まれている package 属性の値は、アプリの普遍的に一意のアプリケーション ID を表します。これは Android アプリの Java 言語形式の完全なパッケージ名の形式です。この名前には、大文字または小文字、数字、アンダースコア(「_」)を含めることができます。ただし、パッケージ名を構成する各部分は文字で始まる必要があります。

package の値は変更しないように注意してください。変更すると基本的に新しいアプリが作成されることになります。その場合、以前のバージョンのユーザーは更新版を受け取ることができず、新旧のバージョン間でデータを転送することもできなくなります。

Gradle ベースのビルドシステムでは、AGP 7.3 以降、ソース マニフェスト ファイル内で package 値を直接設定しないでください。詳しくは、アプリケーション ID の設定をご覧ください。

android:sharedUserId

この定数は、API レベル 29 で非推奨になりました。
ユーザー ID を共有すると、パッケージ マネージャー内での動作が非決定性を持ちます。そのため、この定数は使用しないことを強くおすすめします。Android の将来のバージョンで削除される可能性があります。代わりに、アプリで適切な通信メカニズム(サービスやコンテンツ プロバイダなど)を使用して、共有コンポーネント間の相互運用性を促進するようにしてください。共有ユーザー ID からの移行はサポートされていないため、既存のアプリでこの値を削除することはできません。これらのアプリでは、新規ユーザー インストールで共有ユーザー ID が使用されないように、android:sharedUserMaxSdkVersion="32" を追加してください。

他のアプリと共有される Linux ユーザー ID の名前。デフォルトでは、Android が各アプリに一意のユーザー ID を割り当てます。ただし、この属性が複数のアプリで同じ値に設定されている場合、それらのアプリの証明書セットが同じであれば、アプリはすべて同じ ID を共有します。同じユーザー ID を持つアプリは互いのデータにアクセスでき、必要な場合は同じプロセスで動作できます。

android:targetSandboxVersion
アプリで使用するターゲット サンドボックス。サンドボックスのバージョン番号が大きいほど、セキュリティのレベルが上がります。デフォルト値は 1 ですが、2 に設定することも可能です。この属性を 2 に設定すると、アプリが別の SELinux サンドボックスに切り替わります。

レベル 2 のサンドボックスには次の制限が適用されます。

  • ネットワーク セキュリティ構成の usesCleartextTraffic のデフォルト値は false です。
  • UID の共有は許可されていません。

Android 8.0(API レベル 26)以降を対象とする Android Instant Apps では、この属性は 2 に設定されます。インストール版のアプリのサンドボックス レベルは制限が緩和されたレベル 1 に設定できます。ただし、そのように設定したアプリは Instant App からインストール版アプリにアプリデータが送られず、永続化されません。Instant App からインストール版のアプリにデータを永続化するには、インストール版のアプリのサンドボックスの値を 2 に設定する必要があります。

アプリのインストール後は、ターゲット サンドボックスの値をより大きな値に更新することはできますが、小さくすることはできません。ターゲット サンドボックスの値を小さくするには、アプリをアンインストールして、マニフェストのこの属性値がより小さいバージョンに置き換えます。

android:sharedUserLabel

この定数は、API レベル 29 で非推奨になりました。
ユーザー ID を共有すると、パッケージ マネージャー内での動作が非決定性を持ちます。そのため、この定数は使用しないことを強くおすすめします。Android の将来のバージョンで削除される可能性があります。代わりに、アプリで適切な通信メカニズム(サービスやコンテンツ プロバイダなど)を使用して、共有コンポーネント間の相互運用性を促進するようにしてください。共有ユーザー ID からの移行はサポートされていないため、既存のアプリでこの値を削除することはできません。

ユーザーが読むことができる、共有ユーザー ID 用のラベル。このラベルは、文字列リソースへの参照として設定します。未加工の文字列は指定できません。

この属性は API レベル 3 で導入されました。 この属性は、sharedUserId 属性も設定されている場合にのみ有効になります。

android:sharedUserMaxSdkVersion

ユーザー ID を共有すると、パッケージ マネージャー内での動作が非決定性を持ちます。そのため、この定数は使用しないことを強くおすすめします。Android の将来のバージョンで削除される可能性があります。代わりに、アプリで適切な通信メカニズム(サービスやコンテンツ プロバイダなど)を使用して、共有コンポーネント間の相互運用性を促進するようにしてください。

システムが引き続き android:sharedUserId を使用する最大の SDK バージョン。アプリが、指定した値以降の SDK バージョンを搭載したデバイスにインストールされる場合、アプリの動作は android:sharedUserId を定義していない場合と同様になります。

この属性は API レベル 33 で導入されました。 この属性は、sharedUserId 属性も設定されている場合にのみ有効になります。

android:versionCode
内部バージョン番号。この番号は、バージョンを比較してどちらが新しいかを判定するためにのみ使用されます。番号が大きいほど、バージョンが新しいことを示します。この数値は、ユーザーに表示されるバージョン番号ではありません。ユーザーに表示される番号は versionName 属性で設定されます。

値は 0 より大きい正の整数に設定します。バージョン番号は必要に応じて定義できますが、前のバージョンより番号を大きくする必要があります。たとえば、ビルド番号を使用できます。また、「x.y」形式のバージョン番号を、「x」と「y」を下位と上位の 16 ビットで別々にエンコードすることにより、整数に変換することもできます。あるいは、単に新しいバージョンがリリースされるたびに番号を 1 ずつ増やすこともできます。

android:versionName
ユーザーに表示されるバージョン番号。この属性には、未加工の文字列か、文字列リソースへの参照を設定します。この文字列はユーザーへの表示のみを目的としています。versionCode 属性は、内部で使用される重要なバージョン番号を保持します。
android:installLocation
アプリのデフォルトのインストール場所。次のキーワード文字列を指定できます。

説明
"internalOnly" アプリは内部デバイス ストレージにのみインストールされます。この値が設定されている場合、アプリは SD カードなどの外部ストレージにはインストールされなくなります。内部ストレージに空き領域がない場合、アプリはインストールされません。これは、android:installLocation を定義していない場合のデフォルトの動作です。
"auto" アプリは外部ストレージにインストールされることもありますが、デフォルトでは内部ストレージにインストールされます。内部ストレージに空き領域がない場合は外部ストレージにインストールされます。インストール後に、ユーザーはシステム設定を通じてアプリを内部または外部ストレージに移動できます。
"preferExternal" アプリは外部ストレージを優先インストール先にします。ただし、システムがこの要求を遵守する保証はありません。外部メディアを利用できない場合、または外部メディアに空き領域がない場合は、アプリが内部ストレージにインストールされる可能性があります。インストール後に、ユーザーはシステム設定を通じてアプリを内部または外部ストレージに移動できます。

注: デフォルトでは、この属性を "auto" または "preferExternal" に設定した場合を除き、アプリは内部ストレージにインストールされ、外部ストレージにインストールすることはできません。

アプリが外部ストレージにインストールされた場合、次のようになります。

  • APK ファイルは外部ストレージに保存されますが、アプリデータ(データベースなど)はすべて、内部のデバイスメモリに保存されます。
  • APK ファイルが保存されるコンテナは鍵を使って暗号化されます。このため、アプリはインストールされたデバイスでしか動作できません。ユーザーが SD カードを別のデバイスに移動して、そのカードにインストールされているアプリを使用することはできません。複数の SD カードを同じデバイスで使用することは可能です。
  • ユーザーからのリクエストで、アプリを内部ストレージに移動できます。

ユーザーは、アプリを内部ストレージから外部ストレージに移動するようリクエストすることもできます。ただし、この属性が "internalOnly" に設定されている場合(デフォルトの設定)、ユーザーはアプリを外部ストレージに移動できません。

下位互換性を維持する方法など、この属性の使用方法について詳しくは、アプリのインストール場所をご覧ください。

API レベル 8 で導入されました。

導入時の API レベル:
属性の説明で特に断りのない限りすべての属性で API レベル 1

関連項目:
<application>