🍑

Android12 APIレベル31、完全対応マニュアル

2023/02/08に公開約2,000字

2023年1月から、Android12 APIレベル31、の対応が必須になりました。
そこで必要な対応内容と、それぞれの解説をまとめておきます。

解説はいらねぇ、対応だけパッパと見せやがれ!って人のために解説は注釈にしておきます。
順番は、僕自身が必要になったもの順です。

参考:
https://developer.android.com/google/play/requirements/target-sdk?hl=ja

ついでにコチラもご一緒にどうぞ〜
https://zenn.dev/ataka/articles/08cef284cab7ee

0. build.gradleの、targetSdkVersion、を31にする

たまに、minSdkVersion だと勘違いしている方がいますが、targetSdkVersion、です。

1. AndroidManifestに、android:exported 属性の追加

AndroidManifest.xmlの

  • activity
  • receiver
  • service

タグに、「android:exported="false"」、を追加する。
ただし、MainActivityだけは、「android:exported="true"」、に。

資料にはserviceもって書いてるけど、書かなくても問題ないですね..。
IntentフィルターをService内で使ってないからかな?

2. PendingIntentに、PendingIntent.FLAG_IMMUTABLE フラグを追加

PendingIntentの第4引数、flagに、PendingIntent.FLAG_IMMUTABLE、を追加する。

PendingIntent.getBroadcast(context, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)

IMMUTABLEフラグを追加したのに、IMMUTABLEにしろってエラーが消えない場合は、gradleに次のimplementationを追加すること。

implementation "androidx.work:work-runtime-ktx:2.7.1"

3. AndroidManifestniに、SCHEDULE_EXACT_ALARM 権限の追加

exact系の正確なアラームを使っている場合は、AndroidManifest、に、SCHEDULE_EXACT_ALARM 権限を追加していないと、「アラームを呼び出したタイミングで」 アプリが落ちます。最悪..。

これ以降は、僕は設定していないけど、資料に有った内容を転記しておきます。

4. AndroidManifestの、Bluetooth権限宣言の置き換え

  • BLUETOOTH 権限
  • BLUETOOTH_ADMIN 権限

  • BLUETOOTH_SCAN 権限
  • BLUETOOTH_ADVERTISE 権限
  • BLUETOOTH_CONNECT 権限

のいずれかに置き換える。

参考:
https://developer.android.com/about/versions/12/features/bluetooth-permissions?hl=ja

5. AndroidManifestに、ACCESS_COARSE_LOCATION 権限の追加

ACCESS_FINE_LOCATION、をリクエストする場合、AndroidManifestに、ACCESS_COARSE_LOCATION 権限を追加する。

参考:
https://developer.android.com/training/location/permissions?hl=ja

Discussion

ログインするとコメントできます