少し時間が空いちゃったけど、Android 11 Labs の Day 2 で気になったところだけメモ。
(Day 1 はこちら)
-
ストレージのスコープ化についての最新技術情報
- Android 10 でストレージのスコープは導入されている
- Android 10 より前
- 外部ストレージへのアクセスはストレージのパーミッションがあれば OK だった
- 他のアプリの領域も読み書きできた
- Android 10 から
- セキュリティの観点から、他のアプリの領域は参照できなくなった
- ファイルの所有者がちゃんとわかるようになっている
- 強制ではなく、manifest になんか書けばこの機能をオフにできてた
- Android 11 から
- 強制になった
-
Storage
からFiles & Media
- メディアストレージの操作が便利になった
- 複数の写真をお気に入りにしたり削除したり
- 操作したいデータの URI をリストで渡してユーザーに許可してもらう感じ
- Media Store API を使ったほうがいい
- パフォーマンスとかバッテリーの面でそっちのほうがいいらしい
- ストレージへの全権限が必要なアプリ(ファイルマネージャーとかバックアップするようなアプリ)のために、特別なパーミッションが追加される予定
- ただし厳し目のガイドラインが設定されるはず
-
非公開 API の利用制限について
- 非公開 API は予告なく変更したり消えたりするからできるだけ使わないでね
- でも案外使ってるアプリはある
- White、Light grey、Dark grey、Black の4段階にわけている
- @UnsupportedAppUsage: Light grey
- @UnsupportedAppUsage(maxTargetSdk = 0): Black
- @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.X): Dark grey
- 2000件 Light grey にした
- 800件 Dark grey にした
- 900件 Black にした
- 非公開 API を利用しているか確認する方法
- debug アプリでログで確認する
- Google Play Console で検知
- Android Studio の lint tool
- StrictMode API を利用する??すべての非公開APIが使えなくなるらしい
-
その他の新規機能
- IME の表示/非表示 をコントロールできるようになった
- コールバックを実装する
- フレームレートの設定
- プロセスが終了の細かい情報を取得できるようになった
- 次起動したときに取得できる
- 終了した理由、stack trace
- IME の表示/非表示 をコントロールできるようになった
-
Q&A
- ファイルマネージャ的なアプリは作ることができなくなる?
- できます
- 全体を管理する権限が追加されるのでそれを取得すればできる
- ただしガイドライン厳しいよ
- なぜ外部ストレージ全体を制限したの?
- 所有権をハッキリさせるため(個人的な意見ですが)
- 非公開 API を利用しているアプリを公開後、そのあとその API がブラックになったらリジェクトされる?
- API level によってそれぞれリストがちがうから targetSdk 変えたりしたときにビルドできなくなる
- 非推奨 API はどういう立ち位置?
- 推奨している方法があるんでできるだけそっちの実装の仕方がいい
- android 11 の動作確認は targetSdkVersion を R にした方がいい?
- いずれ R 対応が必須になるんで早めにやるにこしたtことはない
- R にすることで動きが変わる部分もある
- ポリシー変更も情報共有してほしい
- 今後検討します
- scoped storage の best practice はありますか?
- 複数のアプリでストレージを共有しているなら移行してね
- アプリによってストレージの使い方や解決方法はバラバラだろうからベストプラクティスはむずかしい
- 同じ開発者が作ったアプリ間でファイルを共有する方法はありますか?前作のゲームのセーブデータを引き継いで続編で読み込む、みたいな
- Google 検討中
- ユーザーが USB 経由で document、download、メディア以外にファイルを転送したら、そのファイルはアプリから扱えなくなる?
- そうです
- ファイルマネージャ的なアプリ以外でそういう用途おもいつかないなあ
- アプリが終了した情報を保持するやつは firebase を最新にすれば収集できる?
- firebase 関係ない
- OS の機能です
- ACTION_OPEN_DOCUMENT_TREE で初期表示されるフォルダを指定したい
- なぜ指定したいのか教えてくれると助かります
- メディアファイルとその他のファイルでアクセスする仕組みを分けるのに理由はあるんですか?
- 使われ方が違うと思うから分けてるんじゃ
- ファイルの性質がちがう気がするから
- アプリ終了したときの情報はクラッシュだけ?どこに保存される?
- クラッシュ以外も取れるっぽい
- この API 経由でしかアクセスできないです
- ファイルマネージャ的なアプリは作ることができなくなる?