昨日お知らせした「電子帳簿リネーマー」スマホ版ですが、Google Play の審査も通り、Android 版も公開されました。これで iPhone / iPad と Android の両方で使えるようになりました。
内容は iPhone 版と同じです。紙の領収書を撮るだけで、日付・金額・取引先を読み取って 20261104_2763_ENEOS.pdf のような名前のPDFにして、いつものクラウドフォルダに保存します。25件まで無料、それ以降は買い切り 1,980円です。
Android 版ならではの違いがひとつあります。iPhone では Google Drive のフォルダを保存先に直接指定できず「共有」経由になるのですが、Android では Google Drive も Dropbox も、保存先フォルダとして直接選べます。普段 Google Drive を使っている方には、Android 版の方が一手間少なく使えると思います。
Android 版で気をつけたこと
同じコードから作っているので「iPhone 版が通れば Android も同じ」と思いがちですが、提出の前日に実機で確かめたら、Android 側だけで起きる問題が2つ見つかりました。どちらも開発中のビルドでは出ず、ストアから入れ直して初めて分かったものです。
カメラの許可を自分で求める必要があった
iPhone では、撮影機能を呼ぶとOS側が「カメラへのアクセスを許可しますか」と聞いてくれます。Android も同じだろうと思っていたのですが、こちらはアプリ側で「許可を求める」処理を書かないと、いきなり「権限がありません」というエラーになります。
開発中は一度許可した状態が端末に残っていたので気づきませんでした。ストア経由で入れ直したまっさらな状態で初めて再現しました。撮影ボタンを押したときに許可を求め、拒否されていた場合は設定画面への案内を出すように直しました。
リリース用の圧縮で、書類スキャナーが別物になっていた
もうひとつは、もっと分かりにくいものでした。開発中は領収書にカメラを向けると自動でシャッターが切れていたのに、ストアから入れた版では自動で切れず、手動で撮ったあとにエラーが出ました。
原因は、リリース用のビルドで行われるコードの圧縮でした。使っている書類スキャナーの部品は「Google の高機能なスキャナーを起動し、失敗したら簡易版に切り替える」という作りになっていて、圧縮によって高機能な方が起動できなくなり、こっそり簡易版に切り替わっていたのです。簡易版は自動シャッターがなく、その先で落ちていました。
エラーの出た場所だけ見ていたら、簡易版の不具合を追いかけて時間を溶かしていたと思います。「開発ビルドでは動いて、リリースビルドだけ動かない」という条件から圧縮を疑えたのが分かれ目でした。圧縮を切ることで解決しました。
スクリーンショットは OS ごとに作り直す
地味なところでは、ストアに載せるスクリーンショットです。iPhone 版のものを流用すればいいと思っていましたが、キャッチコピーに「iCloud Drive」と入っていたり、画面がiPhoneだったりすると、Android のストアでは嘘になってしまいます。Android 実機で撮り直して、文言も「Google Drive」に直しました。撮り直す途中で、画面に自分のメールアドレスが写り込んでいるのにも気づけました。
提出前の確認は「ストアから入れ直して」やる
今回いちばんの教訓はこれです。開発中は flutter run で上書きインストールを繰り返すので、権限の状態やビルドの設定が「開発時のまま」残ります。提出前には、一度アンインストールして、ストアのテスト配信から入れ直して確認する。これをやらなければ、2つとも公開後にユーザーの手元で起きていました。
おわりに
スマホ版の開発を始めてから、OS ごとの違いに何度も足を取られて、「同じコードで両方動く」と「同じコードで両方ちゃんと動く」は別物だと改めて思いました。
まずは自分で毎日使って、読み取りの精度を上げていきます。使ってみた感想や、読み取れなかった領収書があれば、ぜひ教えてください。



