Android Dev Summit 2019 Extended Tokyo参加レポート

概要

Android Dev Summit 2019 Extended Tokyoに参加してきたのでその内容と感想を書こうと思います。

セッション

Session1: Conference Overview & Keynote Session

mhidakaさんのセッションです。スライドはこちら
カンファレンスの概要とキーノートの内容が主なコンテンツです。
その中で開発者が特に気をつけることとして、OSの開発フロー変更に伴いSDK Target(targetSdkVersionと同義?)の縛りが、最新OSのバージョン−1となることを挙げていました。要はAndroid 11で自分のアプリを動かすにはtargetSdkVersionが29(30 - 1)である必要があるということです。
発表の内容からはGoogleが「開発者がユーザーの安全を考慮しつつ様々なサイズのデバイスをより早く開発できるようにする」という意思が感じられました。

Session2: Android Studio 4.0 最新アップデート

wasabeefさんのセッションです。スライドはこちら
Android Studio 4.0やエミュレーターでできることについての発表です。
個人的にはjava.utilクラスのバックポート、Multi Previewあたりの機能が恩恵にあやかれそうです。
デモとしてGoogle Mapのナビのシミュレーションを行ってましたが、ポケモンGOはやるなよ?という振りましたがあり試すしかない案件では?

Session3: かんたんべんりなMotionEditorの使い方講座

mochicoさんのセッションです。スライドはこちら
Motion Layoutの紹介+アニメーション作成のデモです。
Motiion Editorを使うとアニメーションがGUIで作れてしまうという便利ツールです。プロパティも色々あり柔軟にアニメーションが作れそうです。
ObjectAnimatorを使ってコードでゴリゴリアニメーションの処理を書いて実機で確認していた身としては涙が出る有り難さです。

Session4: What’s new in CameraX

Takasyさんのセッションです。スライドはこちら
Camera Xの紹介です。
が、Camera1しか使ったことがないせいなのか話についていけませんでした。
Camera Xは使いやすさと機種依存しないことに力を入れているため使いやすいぞということだけ理解しました。

Session5: Jetpack Composeの解説です!

Yuki Anzaiさんのセッションです。スライドはこちら
Jetpack Composeの紹介です。
Kotlinとアノテーションを使ってUIを作っていくツールキットで、スライド上のコードを見る限りとてもシンプルな作りになってます。
ただ、カスタムビューをComposeに追加したい時とか既存のビューとの兼ね合いがなかなか辛そうな印象でした。
発表を聴く限り、まだまだ開発途中で最終形がどうなるのか全く読めなさそうです。

Session6: Jetpack Roomの最新情報が届きます!

Yuichi Arakiさんのセッションです。スライドはこちら
Roomの最新情報の紹介です。
Roomは全くキャッチアップできていなかったのですが、最新版ではCoroutines(suspend function)やLiveDataに対応していて以前より使いやすいくなってるように感じました。
また、Flowというクラスが準備されておりDBから取り出すデータを加工してから表示したいときに使えるようです。
DBから取り出してから表示するまでの手段がいくつもあって色々なニーズに答えられそうな実装になってました。

所感

近年のAndroid開発はJetpackの登場やAndroid Studioの進化でとても便利で開発しやすいものになったと感じてましたが、Android Studio 4.0でさらに開発しやすくなるのではないかと思わせる内容でした。Android開発はまだまだ加速できる余地が多々ありワクワクしますね。
このような機会を設けてくださったGDG Tokyoのスタッフ、登壇者、会場提供して頂いた会社さんに感謝:pray:

カメラパーミッションの罠

先日、Androidアプリにカメラのパーミッション追加したときに罠にハマったので備忘録として書いておこうと思います。

事象

  1. QRコード読み取り機能を実装するためにzxing-android-embeddedを導入
  2. カメラパーミッション(android.permission.CAMERA)をAndroidManifestファイルに追加
  3. 既存アプリとQRコード読み取り画面のつなぎ込みをしてリリース!
  4. 前々から実装してあったIntentでカメラ呼び出ししている箇所でSecurityExceptionが発生して死ぬ

原因

カメラパーミッションを追加した場合、ACTION_IMAGE_CAPTUREを使ってカメラアプリを呼び出す場合にもカメラへのアクセス権が許可されていないといけないです。

1
2
3
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(i, REQUEST_CAMERA);

今回の問題が発生した箇所は、上記のように暗黙的Intentを使ってカメラアプリの呼び出しを行っている場所です。
確かに公式ドキュメントを見ると注意書きとして書いてありました・・・。

1
Note: if you app targets M and above and declares as using the Manifest.permission.CAMERA permission which is not granted, then attempting to use this action will result in a SecurityException.

書いてありましたが、事前に知っていないと割とどうしようもないのではと思う。
ACTION_VIDEO_CAPTUREも同様です。

対策

原因がわかってしまえばあとは簡単。ACTION_IMAGE_CAPTURE'を使ってカメラアプリを呼び出す処理の前にカメラパーミッションを取得するダイアログ表示処理を入れてあげるだけです。

参考にしたサイト

https://developer.android.com/reference/android/provider/MediaStore.html#ACTION_IMAGE_CAPTURE
https://developer.android.com/reference/android/provider/MediaStore.html#ACTION_VIDEO_CAPTURE
https://stackoverflow.com/questions/32789027/android-m-camera-intent-permission-bug
https://stackoverflow.com/questions/43042725/revoked-permission-android-permission-camera