Android 用バンドルファイル (AAB) を Google Play Console にアップすると、このようなメッセージが出て App Bundle をアップロードできませんでした。
アップロードされた APK または Android App Bundle には、インテント フィルタを使用するアクティビティ、アクティビティ エイリアス、サービス、またはブロードキャスト レシーバが含まれていますが、'android:exported' プロパティ セットは使用されていません。このファイルは Android 12 以降にはインストールできません。詳細: developer.android.com/about/versions/12/behavior-changes-12#exported
unity 2020.3、2021.3 で確認しました。
これを回避するには AndroidManifest.xml を修正する必要があります。
まず、Project Settings > Player > Publish Settings > Build > Custom Main Manifest
に✔をつける。
AndroidManifest.xml を編集する
Assets/Plugins/Android/AndroidManifest.xml のポジションは変えない方がいいみたいです。
XML が正しく表示されるテキストエディタで開きます。
(Visual Studio 2019 だと設定のせいか、ダブルクオーテーションが消えてしまった)
<?xml version="1.0" encoding="utf-8"?> <!-- GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN--> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" xmlns:tools="http://schemas.android.com/tools"> <application> <activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> </activity> </application> </manifest>
activity タグに android:exported="true" を追加して、再度ビルドしてください。
出来上がった AAB ファイルを再度 Google Play にアップすると、エラーが解消されます。
これでも解消されない場合
この AndroidManifest.xml、使用しているパッケージの中にも存在する可能性があります。
外部から aar ファイルを持ってきて、使っている場合も危険です。
こっそり AndroidManifest.xml が混入されていたりします。
この中に activity が記述されている場合、そちらにも android:exported="true" を書かないとエラーになってしまいます。
私の経験だと UnityGoogleDrive の中にあった aar ファイルで AppAuth が使われており、その activity が問題を引き起こしていました。
UnityGoogleDrive の記述
<activity android:name="net.openid.appauth.RedirectUriReceiverActivity" tools:node="replace" >
unity がコンパイルした後
<activity android:theme="@ref/0x01030010" android:name="net.openid.appauth.AuthorizationManagementActivity" android:exported="false" android:launchMode="2" />
記述がないため、android:exported="false" が勝手に付与されてしまいます。
解消方法
直接該当する AndroidManifest.xml を修正できるのであれば、修正しましょう。
パッケージ内の xml だと、修正しても unity 君が時々ファイルを元に戻す、といういらぬ親切が発動してしまうので、Assets/Plugins/Android/AndroidManifest.xml で上書き記述する、という方法で回避することも出来ました。(Assets/Plugins/Android/AndroidManifest.xml の記述が優先されるようです)
Assets/Plugins/Android/AndroidManifest.xml の上書き記述
<activity android:name="net.openid.appauth.RedirectUriReceiverActivity" tools:node="replace" android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="${applicationId}" /> </intent-filter> </activity>