読者です 読者をやめる 読者になる 読者になる

MfA 4.2.3 UI designerハマりどころまとめ

明日のすまべんセッションのために普段ほとんど使っていないWindows上で動かして準備しているんですけど、WindowsやらVSやらはハマりどころがずいぶん多い…というわけで同じ罠にハマる人が続出しないことを願って、ここにまとめておきます。バグとそうでないものが入り交じっています。

  • VS2010でビルドしてエミュレーターを立ちあげても、VS上のデプロイ対象選択ダイアログが、立ち上がったエミュレーターを認識してくれない。これは既知の問題で、とりあえずandroid.exe(あるいはEclipseのADTやMonoDevelopのAVD manager)から事前に立ちあげておくしかないです。(それも必ずしも上手く認識してもらえるとは限らないのですが、再現性が無いので多分複数回リトライすれば出るようになります。)
  • Google MapsなどGoogleのプロプラエタリなaddonを使っているアプリケーションをビルドしてintelx86エミュレーターにインストールしようとすると失敗します。(INSTALL_FAILED_MISSING_SHARED_LIBRARY) intelエミュレーターに無理矢理google mapsを入れる手段も無いわけではないようです。Xamarinのmobile-samplesにあるMWC appはmapsを使うのでここでコケます。Google addonが含まれているエミュレーターなら問題なくインストールできます。
  • 先日書きましたが.NET Framework 4.5 beta(VS2012RCに含まれるやつ)が入っているとMonoDevelopでMfAのプロジェクトがビルドできなくなります。これは修正されたそうなので、次の4.2.4では直っているはずです。MSもMSで.NET 4.5正式版に向けてバグを修正しているようなので、正式版が出た暁にはPSSuiteも何もしなくても動くようになるでしょう。(多分)
  • 4.2.3ではVS 2010のレイアウト変更のセレクター(プラットフォームバージョンや縦横、day/night, カスタムテーマなど)の変更がデザイナー画面に適切に反映されないバグがあります。MonoDevelopだといけます。
  • axmlファイル*1を手書きして、もしその中に文法エラーなどがあった場合、Reource.designer.csが生成されず、Resource.LayoutやResource.Idを参照するコードが正しくビルドできません。
  • VSのUIデザイナーはよくNullReferenceExceptionが内部で発生したというメッセージを見せてきますが、これは未保存のレイアウトについて何かしらのアグレッシブな処理を行なっているんだと思います。(a)xmlファイルを保存するとこの問題は消えることが多いです。(こわいのであんましやりたくないですが)
  • 基本的にUI designerは、内部でレンダリング用のJavaプロセスを動かして、そことレンダリング内容をやり取りしているので、描画はあたかも本物が動いているかのように見える反面、オリジナルの(Javaの)UI designerがサポートする範囲においてのみ、レンダリングができます。なので、たとえばMapViewを表示することなんかはできませんし、カスタムコンポーネントも使えません。
  • 基本的にMac版MonoDevelopが一番まともに動作します。(開発者の大半がMac使い、残りはLinux使いなので…)

というわけで、明日はこの辺の罠をいろいろ回避しつつwしゃべる予定です。