最近、ブログの更新が止まっていましたが、先日研修で開発合宿があり、2日間かけてアプリ開発をしていました。
今回、Xamarin で Google Cloud Vision API を使ってタグづけを行う Android 向け画像ビューアアプリを開発しました。
それぞれの技術については触れませんので、こちらのページなどからご確認ください。
2日間という期間なのと、初めての取り組みであることから雑なコードも書いていますが、GitHub にも公開していますので合わせてご覧いただけたらと思います。
- yasu0796/XamarinCloudVisionApp(GitHub)
Google の API を使う上でのキーはダミーのものに変更していますので、ご自身で API キーを取得して2カ所書き換えてください。
機能
起動後、端末に保存されている画像を表示
画面上のタグを選択すると、そのタグが付与されたタグを絞り込み表示
タグの付与は Google Cloud Vision API を使用
テスト版のため、単一画像表示画面で選択した画像のみ解析
(将来的には自動的に API 呼び出ししたい)
画像は SNS などで共有も可能
Xamarin を使うことになったきっかけ
今回は複数チームで開発しましたが、対象となるプラットフォームは指定されておらず、Android アプリだったり、ウェブアプリだったりさまざまなものがありました。
ちなみに、Xamarin を使ったアプリは自分達だけでした。
今回、自分のできることを考えた上で Xamarin がすぐに開発できそうな気がしそうなだと思いました。
- C# の開発経験あり
大学の研究で使っただけで、一般公開できるクオリティではない - Twitter API を使った内容で、API の呼び出し、JSON 関係は経験あり
実際、Windows 向けに開発していたコードがそのまま動作しました。 - Android 開発経験ほとんどなし
研修で配布されたコードで Android Studio を使ってシミュレータや実機で動作させるところまでは経験
現在、マイクロソフトで Xamarin のエバンジェリストとして活躍されている、ちょまど(@chomado)さんの影響もありました。
(ちなみに、ちょまどさんとは同い年のようで…親近感!)
「ちょまどさんはどうしてXamarin(ざまりん)が好きなの?」
と、よく聞かれます!
色々理由はあるけど一番の理由は
「C#が大好きだから。(Xamarin使えばC#でスマホ/Macアプリが作れる」
です! pic.twitter.com/hlXTT1nCOy— ちょまど@ ITエンジニア (@chomado) June 27, 2016
使ったもの
- Visual Studio 2015 Community Update 3
- Xamarin(Blank App (Native Portable) テンプレート使用)
- NuGet パッケージ
SQLite.Net-PCL
今回は、UI に Xamarin.Forms ではなく、Android ネイティブの AXML を使用しました。
違いについては下記のページにありますが、今回は Visual Studio でデザイナーが使えないのと情報が少ない、端末内のファイルの読み書きといった Android 特有の処理もあるので、ネイティブを使いました。
- Xamarin開発環境の選択(SlideShare)
Cloud Vision API の解析結果を保存するために、端末内に SQLite データベースを保存します。
SQLite について NuGet パッケージはいくつかあるのですが、今回は下記の記事で取り上げられている Øystein Krog さんの SQLite.Net-PCL を使用しました。
本来 SQL 文を書かなくても扱えるのですが、JOIN を使いたい場面があり、一部 SELECT 文を書いているところがあります。
あと、最初に端末内の画像ファイル情報を全て書き込むのですが、トランザクションを使用すると劇的に高速化しました。
JSON については、パッケージに頼らず System.Runtime.Serialization.Json; を使用しています。
Xamarin 特有の注意はなく、Windows の C# で書いていたまま利用できました。
感じたこと
アプリ開発している上でいくつか気になる点がありましたので、紹介します。
- Android Java のコードでも C# らしく書き換えると動くこともある
- 一文字目の小文字を大文字へ(setText → SetText)
- 大文字とアンダーバーは大文字小文字へ(MICRO_KIND → MicroKind)
- IntelliSense に頼るとなんとかなることもある。
特に2番目は検索エンジン上アンダーバーの有無は区別されるため、情報が見つからず、Xamarin では使えないのかと思っていました。
- 8GB メモリでも Visual Studio と Android エミュレータを動かすと危険
調査の際はブラウザで多くのタブを開くこともあるので、スワップが発生しました。
実機でのデバッグを推奨します。 - 端末のメモリ不足
高解像度な画像ファイルをそのまま Bitmap に展開しているせいだと考えられますが、メモリ不足のエラーが発生することもありました。
しかし、Android を対象とすると Windows のようにメモリの「診断ツール」がないため、そういうのがあると便利になると思いました。
Java.Lang.OutOfMemoryError: (Heap Size=26595KB, Allocated=19965KB)
アプリの紹介で終わりましたが、今回の Xamarin の開発で学んだこともこのブログでアウトプットできて行けたらいいなと思っています。
- yasu0796/XamarinCloudVisionApp(GitHub)
ブログを更新しました!
「Android 開発初心者の自分達が2日間で Xamarin でアプリ開発してみた」
https://t.co/FJdYHIOyVW
RT @oyasu_info: ブログを更新しました!
「Android 開発初心者の自分達が2日間で Xamarin でアプリ開発してみた」
https://t.co/FJdYHIOyVW
RT @oyasu_info: ブログを更新しました!
「Android 開発初心者の自分達が2日間で Xamarin でアプリ開発してみた」
https://t.co/FJdYHIOyVW
RT @oyasu_info: ブログを更新しました!
「Android 開発初心者の自分達が2日間で Xamarin でアプリ開発してみた」
https://t.co/FJdYHIOyVW