「ハイブリッドアプリの習作」を勝手に補足

朝、TL で流れてきた ハイブリッドアプリの習作(DHJJ [Hatsune's Journal Japan] blog) というエントリをみて、手始めというところでは程よい題材かなと思うのですが、何点か推奨されない点があるので勝手に補足しようと思います。

Resources フォルダにコードを突っ込んではいけない

"Resources\Layoutの中に、いわゆるViewが入ります。形式はAXMLというやつでXAMLよりも正直しょぼいです。 Activity1.csが画面に対するコードビハインドを記述しているところになります。 なんとなくしっくりこないので、ちょっと名前を変えてみましょう。ついでに場所なんかも変えてみたりして。"

下記は上記センテンスにあった画像の、再現画像です。

f:id:iseebi:20140304143351p:plain

「なんとなくしっくりこない」ということで、Resources/Layout フォルダに .cs ファイルを移動してしまってますが、Assets フォルダや Resources フォルダ以下のフォルダは Android では特別な意味を持っています。 このフォルダに一定のルールで配置されているファイルを、リソースとしてビルドしていくということになっています。

また、ただ Layout 1つだけがあるわけではなく、Qualifier というものをつけることによって、環境によって使用されるリソースを切り替えるという仕組みもあります。 この仕組みについて詳しくは Android 公式リファレンス Providing Resources を参照してください。 Qualifier で解像度を加えると、下記のようになります。

f:id:iseebi:20140304143432p:plain

これだけでもすでに、意味合い的にはだいぶずれてきたというのはおわかりいただけるでしょうか。

なお、Java ではこのようなことをするとビルドエラーとなってしまいます。@atsushieno さんによると、Xamarin では、ビルドアクションの設定がきちんとされていればエラーにはならないそうです。しかしながら、意図せずソースコードがリソースに混入して流出するという事件が容易に予想できます。

「事故防止」「混乱防止」のためにも、Resources 以下にはリソースだけを置くこと。「郷に入れば郷に従え」です。

エミュレータは Genymotion を使おう

エミュレータが遅いと表示される」というところで「これは起動時に必ず出てしまうそうなので気にしないのがベストアンサー。」とされていますが、ベストアンサーは Genymotion を使うことです。Xamarin 公式ドキュメントの インストールガイド にも記載されています。

Genymotion は VirtualBox をベースとして動作する高速な Android エミュレータです。

また、このような技術の類似に、公式に提供されている方法として Intel HAXM があります。

ただし、どちらも Windows Phone 8 SDK が入っている環境の場合 Hyper-V とかち合ってしまうため、Hyper-V をオフにして OS を起動する必要があります。この切り替えはブートエントリ編集すればできますので、こちらの記事を参考にしてください。

Android の WebView に関するセキュリティリスク

Android の WebView には重大なセキュリティリスクがあります。自分のアプリだけでなく、他のアプリに対して情報を飛ばす等もできてしまいます。昨年末くらいから今年頭にかけて Android クラスタでは大騒ぎになっていました。

SDK Version 17 未満では、自分で addJavaScriptInterface しなくても、システムが addJavaScriptInterface しているため、JavaScript をオンにするだけでアウトです。このことを留意してJavaScript を有効にしないとか、中に表示される HTML を絶対に安全な物だけにするとか、対策をとっておく必要があります。


Xamarin は C#iOS / Android アプリが書けますが、その下には、Objective-C / Java とかわらない、各プラットフォーム固有のフレームワークがあり、それに伴ったしきたりがあります。それぞれのしきたりを理解するには、各プラットフォームの公式リファレンスだけでなく、Xamarinのリファレンスもよくまとまっていますし、ネイティブ向けに書かれた書籍が数多く出版されている状態なので、読み替えれば情報に困ることはないでしょう。

C# だけを書いてきた人たちも、まずはこういうところからスタートすると、よりよい iOS / Android アプリをかけるでしょう。