Monaca

Android 12(APIレベル 31)について

Monacaチームの小田川です。

Android 12(APIレベル 31)のリリースから半年以上が経過し、Monacaで提供しているリモートビルドサーバでもtargetSdkVersion 31でビルドされるケースが増えてきました。

Android 12では、intent-filterの設定方法に変更があり、それに伴いビルドエラーも多くなってきました。今回は、Android 12(APIレベル 31)の設定や注意点について見ていきたいと思います。

Android 12(APIレベル 31)の設定

Monacaで作成するアプリでAndroid 12(APIレベル 31)から提供されている機能を利用する場合は、Androidプラットフォーム10系以降を使用する必要があります。

Android 12から提供されている機能を利用する場合は、compileSdkVersionに対して31を設定する必要があります。

現在提供されているAndroidプラットフォーム10系では、targetSdkVersionに設定した値がcompileSdkVersionに反映されます。そのため、targetSdkVersionに31を設定した場合は、compileSdkVersionも31が設定されます。

Androidプラットフォーム10系に設定されているtargetSdkVersionの標準設定は、30になります。MonacaでtargetSdkVersionを31に設定する場合は、MonacaクラウドIDEのAndroidアプリ設定画面にあるターゲットSDKバージョンに31を設定することで対応することができます。

intent-filter設定について

Android 12に対応したアプリに、intent-filterを使用するアクティビティ、サービス、ブロードキャスト レシーバが含まれている場合は、AndroidManifest.xmlにandroid:exported属性を宣言する必要があります。

Androidプラットフォーム内にあるAndroidManifest.xmlでは、アクティビティ(activity)にintent-filterが含まれています。対象のアクティビティーに対してandroid:exported属性が宣言されていない場合は、ビルドの際に以下のようなandroid:exportedに関するエラーが発生します。

Execution failed for task ':app:processReleaseMainManifest'.
> Manifest merger failed : Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.

android:exportedに関するビルドエラーの対応方法

Androidプラットフォーム 10.1.2を使用する

現在リリースされている最新版のAndroidプラットフォーム 10.1.2では、AndroidManifest.xmlに設定されているアクティビティー(activity)に対して、android:exported属性が宣言されています。そのため、android:exportedに関するビルドエラーが発生した場合は、Androidプラットフォーム 10.1.2を使用することで対応することができます。

Monacaでは、Cordova 11用のMonacaプロジェクトでAndroidプラットフォーム 10.1.2に対応しています。

Androidプラットフォーム 10.1.2の設定は、MonacaクラウドIDEのビルド環境の設定画面から行うことが出来ます。

ビルド環境の設定画面

Androidプラットフォーム 10.1.2を使用してもビルドエラーが発生する場合

intent-filterの設定は、Androidプラットフォーム内にあるAndroidManifest.xml以外に、Cordovaプラグインの設定ファイル(plugin.xml)でも設定されている場合があります。

Androidプラットフォーム 10.1.2を使用してもandroid:exportedに関するビルドエラーが発生する場合は、使用しているサードパーティー製Cordovaプラグインの設定ファイルにintent-filterが設定されていないか確認してください。

対象のCordovaプラグインの設定ファイルにintent-filterが設定されている場合は、最新版でandroid:exported属性が宣言されているか確認してください。最新版でandroid:exported属性が宣言されている場合は、最新版を利用することで対応することができます。

最新版にandroid:exported属性が宣言されていない場合は、以下の例のようにandroid:exported属性を宣言したカスタム版のCordovaプラグインを作成して利用する必要があります。

<!-- android:exported属性の設定例: -->
<config-file target="AndroidManifest.xml" parent="/manifest/application">
  <receiver android:name="xxx.xxx.xxx" android:enabled="true" android:exported="true">
    <intent-filter>
      <action android:name="android.intent.action.SEND"/>
    </intent-filter>
  </receiver>
</config-file>

作成したカスタム版のCordovaプラグインは、ZipファイルにすることでMonacaクラウドIDEのCordovaプラグインの管理画面からインポートして利用することができます。

おわりに

Cordova 11用のMonacaプロジェクトでターゲットSDKバージョンを31に設定したことでandroid:exportedに関するビルドエラーが発生した場合は、はじめに、Androidプラットフォーム 10.1.2を使用してビルドを試してみてください。

Androidプラットフォーム 10.1.2で対応できない場合は、使用しているサードパーティー製Cordovaプラグインの設定ファイル(plugin.xml)を確認し、intent-filterが設定されていて、android:exported属性が宣言されていない場合は、難易度は高くなりますが、android:exported属性を宣言したカスタム版のCordovaプラグインを作成してビルドを試してみてください。

author img for keiji_asial

keiji_asial

前の記事へ

次の記事へ

一覧へ戻る
PAGE TOP