catalinaの備忘録

ソフトウェアやハードウェアの備忘録。後で逆引きできるように。

androidアプリの開発環境を作り直してみた(androidstudio)

今度はandroidに手を出してみてます。かたりぃなです。
ずいぶんと前にいじってみたときはeclipseでコード書いて色々遊んでた気がします。

今どうなってるのかと調べてみると、eclipse用のandroid開発アドオンのサポート終わったらしく、
今後はAndroidStudioでよろしくとのこと。
http://developer.android.com/intl/ja/tools/help/adt.html

私は言われたとおりにやるのが嫌いな天邪鬼な性格なので、なんか他の方法でanroidで遊べないかなぁと調べてみました。
できればマルチプラットフォームAndroidWindows両方一度に開発みたいにできたらかっこいい。

候補

  1. C#でゴリゴリ書く for VS2015
  2. JavaScriptで書く for VS2015
  3. SilverLight+C# for VS2015

なんかVisualStudioに偏ってるけど、どんなものか大雑把に整理

VisualStudio2015を使って、C#でゴリゴリ書く

C#で記述したコードを走らせるためには.Netフレームワークが必要。
windows以外の環境ではxamalin上で走らせる(昔はmonoとか呼ばれてたアレですね)

VisualStudio2015を使って、JavaScriptで書く

JavaScriptHTML5使ってブラウザ上で動作するものを書く。
ブラウザを内包するアプリという形。下回りはCordova。

上記2つはこのページで軽く説明がありました。
特集:次期Visual Studioの全貌を探る:Visual Studio 2015におけるクロスプラットフォーム開発の選択肢 (2/3) - @IT
MSDNのページのほうが情報量は多いけど、偏ってる。当然といえば当然ですが。

SilverLight + C#

そろそろ終わるんじゃないかな。
Flashの対抗馬として頑張ろうとしてたけど、イマイチ感が拭えない。

時代はJavaScriptHTML5な感はあるけど、そこまで魅力を感じない。
やっぱり自分はネイティブな言語のほうが好きなんだなぁと。
というわけでAndroidStudio試してみることにしました。
Androidでhelloworldやっててもつまらないので、opencv走らせてみた。

AndroidStudioのインストール

そのままインストール。
JavaSDK, NDKなど関連するものまとめて入れる。

OpenCV3.0のインストール

OpenCV4Androidがあるのでそれを使いましょう。
このあたりの情報を参考にすればいけるはず。
Android StudioでOpenCV for Androidを使用する | Smartphone-Zine
OpenCV3.0.0 for AndroidStudio - Qiita

opencv.orgではeclipseを使った設定方法しか記述されていないのが辛い。
ANDROID | OpenCV

GradleでNDK-Buildできるよう設定する

C/C++でコード書きたい病を患っているので、設定する。
せっかくopencv放り込むんだから、C/C++から叩きたいですよね。
こういうビルドツールの情報調べるたびに思うのだけど、統一できないものなのかな。
C/C++出身としてはmakeでいいやんとか思ってしまう。

NDK-Buildの設定の前に、Gradleを2.5にアップグレードしないとAndroidStudioに怒られるのでやっておく。
表記法が大幅に変わっている様子。

このあたりのサイトを参考にしました
AndroidStudioでNDK(JNI)を活用する 準備編 - Qiita
Experimental Plugin User Guide - Android Tools Project Site

OpenCVのサンプルコードを動かしてみる

OpenCV-android-sdkのsamplesにあるコード動かすだけ。
OpenCVがあればカメラなんかの入出力回りも面倒見てくれるのでラクですね。
ちょっと気になったのでAndroidAPIを直接叩いてカメラ動かす方法を調べてみた。

AndroidのカメラAPI

Androidとしてはカメラ周りのAPI(android.hardware.camera)が非推奨になってた。
特定のAPIバージョン以上では、cameraの代わりcamera2を使いなさいとのこと。
android.hardware.camera2 | Android Developers
仕様が随分と変わってイベントハンドラを登録して、それに対応する処理を書いていくことになりそう。
カメラプレビューに対する加工も楽にできるかもしれません。
(OpenCVJava-IFにあるカメラAPI叩けば、Mat形式でフレームデータもらえるのでこれが一番ラクだと思います。)

WindowsのカメラAPI

ついでに調べてみました。
こちらは撮影・記録時はイベントハンドラによる処理を行えますが、プレビューの各フレームに対する処理はできなさそうです。
(たとえば色調補正をしたいとか。)
MediaCapture Class (Windows)

Windowsのカメラを使って、プレビューの各フレームに対する処理をしたい時は、Microsoft Media Foundationに従ってプログラミングする必要がありそうです。
たとえば、mediacapture-API一覧にあるStartPreviewToCustomSinkAsync と AddEffectAsync を使うために、引数IMediaExtensionを自作するなど。

Overview of the Media Foundation Architecture (Windows)
メディアストリームに対する変換の例はmediacaptureのサンプルでグレースケール化するというものがあります。
またカスタムメディアシンクを使ったサンプルはカスタムメディアシンクから得た映像をDirect3Dレンダリングするというものがあります。
どちらもMediaFoundationを使ったサンプルプログラムに含まれているので、Windowsでも何かやりたい時はこのあたりを参考にすればよさそうです。
軽く流し読みしたところ、ただのCOMっぽい。

Gradle使ってみた感想

一通り設定した結果、、、Javaの開発では必要なんですね。こういうの。
makeとshellで頑張ればいけなくはないですが、そうしてオレオレビルドツール作るくらいなら、こういうの使うほうが正解ですね。
とりあえずGradleでやってみたけど、自分の設定が悪いのか、非常に重いです。ストレスたまります。

AndroidStudioでandroid開発してみた感想

サンプルコードもそうだけど、UIの制御とビジネスロジックが混ざるのがいただけない。
AndroidGUIよくわかってない部分が多いけど、もっと綺麗に分離できる方法あるのだろうか?


実験や調べものしつつエントリを書いていたのでまとまりがなくなってしまいました。
今日はこのあたりで。