初投稿です。
Android11の登場に向けて、優先的に対応しておいた方が良さそうだと思う変更点をピックアップします。
既存アプリへの対応という観点で見ているので、新機能にはあまり触れていません。
(今後もドキュメントの変更に応じて加筆修正するかもしれません)
主な情報引用元
Android11上でアプリを動かす際に適応される項目。
https://developer.android.com/about/versions/11/behavior-changes-all?hl=ja
targetSdkVersion=30とした時に適応される項目。
https://developer.android.com/about/versions/11/behavior-changes-11?hl=ja
プライバシー関連。
https://developer.android.com/preview/privacy?hl=ja
ちなみに、上記ドキュメントは更新頻度がそれなりに高いため、定期的にチェックした方が良いです。
Android11上の変更点
ファイル記述子サニタイザー(fdsan)
fdsan
が何者かよく理解していないのですが、
エラーを検出すると中断するようになります。以前は、警告をログに記録して、続行していました。
上記の変更内容が嫌な予感してます。
アプリ自体をクラッシュさせるということであれば、大きな挙動変更点かと思います。
変なメモリ解放とかやっていなければ特に問題はなさげですが、注意ポイントです。
マップ v1 共有ライブラリの削除
これは Google Maps Android API v1
のことかと思います。
Android10で機能しなくなり、11で完全に消えるとのことです。
GCPの Maps SDK for Android
へ移行してくれと注意喚起されています。
対応する <uses-liblary>
をマニフェストから外さないと、
GooglePlayでユーザーにアプリが表示されない場合があるとのことなので、ちゃんと外しておきましょう。
targetSdkVersion=30の変更点
カスタム トーストビューのブロック
デザインをカスタマイズした toast
を、
バックグラウンドから動かすことができなくなったようです。
代わりに SnackBar
が推奨されています。
その他、 text toast
にも変更点があり、
getView()
等の一部のメソッドが機能しなくなっています。
詳しくは以下を確認してください。
https://developer.android.com/reference/android/widget/Toast
APK 署名スキーム v2 が必要
APKをビルドする際、Scheme v1だけでなくv2も署名してくださいとのことです。
Android Studioで署名付きビルドをする際、チェックボックスで選択可能ですね。
Android Studio 2.2(gradle plugin 2.2)以降では、
デフォルトの挙動が v1 + v2
となっているので、
明示的にスキーム設定を無効にしていなければ、特に心配する必要はありません。
(情報元)
https://google.github.io/android-gradle-dsl/current/com.android.build.gradle.internal.dsl.SigningConfig.html (リンク無効ですが一応)
https://developers-jp.googleblog.com/2016/11/understanding-apk-packaging-in-android-studio-2-2.html
(追記)
gradle pluginのバージョンによって、動作が異なるようです。
例えば、v4.0でtargetSdkVersionが24以上、さらにスキームの明示がない場合、v2のみとなります。
minSdkVersion次第では、自動的にv1が付与されることもあるようです。
https://developer.android.com/studio/releases/gradle-plugin?hl=ja#4-0-signing-config
メディア インテントのアクションにはシステムのデフォルト カメラが必要
以下のintentに対応できるのが、プリインストールのカメラアプリだけになるそうです。
- android.media.action.VIDEO_CAPTURE
- android.media.action.IMAGE_CAPTURE
- android.media.action.IMAGE_CAPTURE_SECURE
デバイス間のファイル転送
allowBackup
の挙動が変更される模様です。
アプリのセーブデータ等をバックアップ不可にするとのことで、
FCMの仕様上の都合(registration_idの記録封じ)等で、このフラグを false
にしている方はそれなりにいらっしゃると思います。
ただ、 デバイス間
と書かれているので、
同一のOS同士のファイル転送だけが無効化できなくなったのだと思います。
クラウドへのバックアップは問題なく封じることが出来るはずです。
プライバシー関連
直近一ヶ月の間にも続々と内容が更新され、かつ、例年と比較してボリュームが膨大なので、
特に注視しておいた方が良い項目です。
対象範囲別ストレージの適用
targetSdkVersion=30の時、requestLegacyExternalStorage
フラグが無視されます。
つまり、対象範囲別ストレージが強制的に反映されることになります。
Android10以前のデバイスではフラグは有効なのですが、この点が地味に厄介で、
Android10以前と11以降で、処理を分けなければいけない場面が出てくるかと思います。
最も影響を受けるのはメディアファイルを扱っている場合ですが、ユースケース毎の対応が用意されています。
https://developer.android.com/training/data-storage/use-cases?hl=ja
他のアプリのプライベート ディレクトリへのアクセス
表題の通り、他アプリの外部ストレージディレクトリにはアクセスできなくなります。
権限
アプリが Android 11 をターゲットとしている場合、WRITE_EXTERNAL_STORAGE 権限と WRITE_MEDIA_STORAGE 特権の両方で、追加のアクセス権を提供しなくなりました。
徹底的にファイル書き込みを封じに来てますね。
代替っぽい権限として、後述の MANAGE_EXTERNAL_STORAGE
が追加されていますが。
すべてのファイルへのアクセス
MANAGE_EXTERNAL_STORAGE
権限が追加。
Added in API level 30
なので、Android11 OSで利用可能。
付与すると、 他のアプリの専用ディレクトリ以外
であれば、
大抵のディレクトリへの読み書きが出来るようになる模様です。
ただし、プライバシーポリシーに利用制限が存在するので注意が必要です。
これを守らないとAPKファイルのアップロードが出来ない可能性があります。
https://support.google.com/googleplay/android-developer/answer/9956427?hl=ja
機能全般
パッケージの公開設定
targetSdkVersion=30から、他アプリとの連携に queries
を利用する必要があります。
この項目、そこそこ大きい変更点で他アプリ呼び出し時に制限がかかります。
https://developer.android.com/training/package-visibility/use-cases?hl=ja
Custom URL Scheme(DeepLink)等を利用している場合も動作影響があると思われるので注意です。
なお、問題は他にもあり、
- Android Studio 3.6.1以上
- Android Gradle プラグインの最新リリース(最新ってどの時点のですかね)
この2つがビルド条件に含まれている事の方が大きな影響があります。
特に、Gradle Pluginが一気に新しくなると、
使用できなくなるライブラリがあってもおかしくありません。
今までこまめにアップデートしていれば、問題にならなそうですが。
OpenGL ES に ANGLE を使用する
OpenGL ES利用時、ベンダーのNativeドライバかVulkanかを選択出来るようなります。
Android 11 beta2.5時点では、初期ドライバがNativeとの事なので、
今のところは影響はないと思われますが、将来的にこちらがデフォルトになる可能性もありそうです。