Xamarin.Android開発をVisualStudio2013で行う際のメモ

MS MVP向けにXamarin.AndroidとXamarin.iOSのライセンスがあるということで、申し込みをしたところ、無事ライセンスが発行されました。

このライセンスはBusinessレベルのライセンスになっているので、自身が使い慣れた「VisualStudio2013」と連携させて使用できるようになりました。

無償のライセンスもあるのですが、「VisualStudio」との連携がなく「XamarinStudio」での開発になり、アプリケーションの容量に制限があります。
まずC#で開発を試したいという場合には無償版でも問題ないと思いますが、「VisualStudio」を利用できるメリットは非常に大きいので、ライセンスの購入を検討されてはいかがでしょうか?

Xamarinのインストールに関しては、Xamarin の代理店であるエクセルソフトの田淵さんがBlogに詳しく書かれています。
これから Xamarin を始めたい方向けの凄く丁寧なインストールガイド (Windows/Android 編)

・個人的な追記
・環境変数は「コントロールパネル」>「システム」>「システムの詳細設定」>「環境変数」
・システム環境変数に新規追加で変数に書く際は「%」は記述不要(のはず、「値」には必要)
・「%JAVA_HOME%」はJAVA SDKインストールフォルダ
・SDK Manager で「Google USB driver」は実機デバッグに必須

さて、実機シミュレーターですが、「VirtualBox」ベースのため「Hyper-V」が有効の環境では使用できません。
自分はWindowsPhone8.1開発も行っているため、これが地味に困る状況だったりします。
今後「Hyper-V」に展開される実機シミュレーターが出るともっと便利かなとは思います。

なので、「Nexus 7(2013)」を購入して、実機デバッグを行うことにしました。

Nexus 7は(2012)と(2013)がありますが、知人から(2013)でないとBLE(Bluetooth Low Energy)が使用できないという情報がもたらされたので、今後も考えて(2013)にしました。((2012)でも向け道はあるようですが、面倒なので)
また、Nexusじゃなくてもいいんじゃないかというのもあったのですが、キャリア端末の場合デバッグが動かない可能性をやはり知人からもたらされたので、Googleの公式端末であるNexusを手に入れました。

さすがにXamarin初心者ですので、参考にするために「C#によるiOS、Android、Windowsアプリケーション開発入門」を丁度参加していたMicrosoft Conference 2014会場で先行販売していたので、購入してきました。

Kindle版も出ています。

現在XamarinはXamarin.FormsというView部分の共通作業を行えるように発展しています。
上記の本ではこれが出る前の方法となっているので、少々古い部分はありますが、手探りでやるという状態よりは良いでしょう。

実機デバッグの準備
インストールは上記の方法でしているものとして、まずNexus7の「開発者向けオプション」を有効にします。

・「設定」>「タブレット情報」>「ビルド番号」を7回タップ
タップしていると「デベロッパーになるまであと~ステップです」と表示されてステップが減ります。
・成功すると「設定」に「開発者向けオプション」が表示されます。
・「開発者向けオプション」>「USBデバッグ」をタップして有効にします。
・PCにデータ通信可能なケーブルでUSB接続します。
・「コントロールパネル」>「システム」>「デバイスマネージャー」>「Nexus7」に「?」がついています。
・「Nexus7」を右「クリック」>「プロパティ」>「ドライバー」>「ドライバーの更新」>「コンピュータを参照してドライバーソフトウェアを検索します」>「参照」>「C:\dev\Android-Studio\sdk\extras\google\usb_driver」
・インストールを行うと「Android ADB Interface」がインストールされます
Android ADB Interface

android01

・インストール後、実機側で「USBデバッグを有効にします」と出るのでタップすれば、VisualStudio2013上で認識されます。
android02

android03

これで取りあえず、VisualStudio2013上での開発と実機デバッグが行えるはずです。

AndroidはバージョンごとにAPIレベルが設定されているので、使用するコンパイラレベルと最少バージョンを指定しなければいけません。
プロジェクトのプロパティで「Compile using Android version」と「Minimum Android to target」を変更します。

ProjectProperty

既存のVisualStudio2013ソリューションにXamarinプロジェクトを追加する場合、追加が終わらず応答なしになる時があります。
この場合、VisualStudio2013を強制終了して、ソリューションを起動、既存プロジェクトの追加で、追加はされていないもののプロジェクトファイルは作成されているので、それを参照して追加することで、作業を開始できます。

さて、なんでVisualStudio2013ベースをお勧めしているかといえば、楽だからです。
もちろんXamarinStudioも性能が上がってきていますが、VisualStudioはそれ以上に便利でパワフルです。
また、Windows/WindowsPhone8.1の開発を先に開始していることもあり、既存ソリューションの移植、TFSとの連携からVisualStudio上での開発を行っています。

まずはこんなところから開発事始め的なメモ記事を書いてみました。

Windopws Phone SilverLight 8.1 アプリをuniversal Appとして申請する場合のメモ

Windows8.1ストアアプリ側でInkManagerなどを使用したアプリを作成していた場合、WindopwsPhone SilverLight 8.1(以下WPSL8.1)で、アプリを作成しなければならなくなります。

このWPSL8.1アプリをユニバーサルアプリとして連携させる場合、ひと手間かかります。

sys000

上記のように同じソリューション内にWPSL8.1用のプロジェクトを作成するのが一般的だと思います。

作成はそのまま進めることで問題ないですが、そのままではアプリ登録時の検証でエラーが発生します。

sys001

WPSL8.1用の「Package.appxmanifest」をダブルクリックすると上記のように表示されるので、「パッケージ名」を登録済みWindowsストアアプリの「Package.appxmanifest」からコピーします。

次にWPSL8.1用「Package.appxmanifest」を右クリックし、「ファイルを開くアプリケーションを選択」>「ソースコード(テキスト)エディター」を選択して、XMLをテキストとして開きます。

sys002

「Identity」にある「Publisher=”CN=~”」をWindowsストアアプリの「Package.appxmanifest」、発行者に書かれている「CN=~」をコピーしてペーストします。

これらの書き換えはWindowsストアアプリが登録済みでなければできないので、WPSL8.1アプリを先行させている場合は、更新時に連携設定と書き換えを行う形になります。

WinRTベースのユニバーサルアプリを作成する場合は共有となり「Publisher=”CN=~”」の書き換えなどは必要ないので迷わず行えます。

今回はWPSL8.1アプリで説明しましたが、universal連携そのものはWP7.5/8アプリでも可能なようです。
おそらく同じような方法で連携設定を行うことになるのではないかと思いますが、自分は環境をWP8.1に移行していますので、検証できていないことをご了承ください。

Action<in T>のメモ

Action<in T>はdelegateで単一パラメーターの戻り値を持たないカプセルメソッド

public class Hoge : IDisposable
{
        Action<string> _hogehoge;

        public Hoge(Action<string> HOGEHOGE= null)
        {
                _hogehoge = HOGEHOGE;
        }

        void HogeHoge(string message)
        {
            if (_hogehoge != null)
            {
                _hogehoge(message);
            }
        }
}

上記のように宣言しておく

public class Main
{
        Hoge HOGE;

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            HOGE= new Hoge(async (m) => await Dispatcher.RunIdleAsync((o) => Statustext.Text = m));
        }
}

こんな感じで宣言しておけば、class HogeでHogeHogeにテキストを投げて表示Pageに表示することができます。

Dispatcher.RunIdleAsyncなので、コントロールに限らず定義可能なので使い道は多いと思う。

今回はクラス内のStatusを追いかけるのにstringを宣言してますけど、<T>なので他も可能です。

Visual Studio 2013 Update 2がリリースされた模様

RC版はすでに出ていて、開発/配布に制限はなかったですが、リリース版に更新したほうがいいでしょう。

今回の更新で「Apache Cordova」がサポートされたようです。
MicrosoftのBlogに記載があります。
Somasegar’s blog
Mobile-first, Cloud-first Development – Visual Studio 2013 Update 2 released, Visual Studio Apache Cordova Tooling preview and the future of .NET for Cloud and Server

CSS/HTML/JSで作成するアプリが「Apache Cordova」を利用することでマルチデバイス(Android、iOS)への展開が可能だそうです。

公開場所は下記のリンク先です。
Microsoft Visual Studio 2013 Update 2

ダウンロード先のファイルは差分updateファイルなので、フルインストールしたい場合はMSDNからDLですね。

Update 2はWindowsPhone8.1SDKが同梱されたり、universal Project Apps に向けた更新が行われています。

Microsoft Visual Studio Express 2013 with Update 2 for Windows
Visual Studio Express 2013のUpdate 2も配布が開始されています。
Download language に日本語もあるので、Expressで開発をという方はこちらのリンクからダウンロードしてインストールですね。

さて、何で英語ページなんだという話になると、日本のVisual Studioページが2012で止まっていて更新されていないためです。

まあ、開発者なら英語くらいというか、ニュアンスつかむくらいは可能ですしね、、、
ただ、新しい開発者への支援体制という意味では改善してほしいところですね。

Visual Studio 2013 Update 2 RCが公開

現在開催中のBuild 2014 に合わせて「Visual Studio 2013 Update 2 RC」が公開され、新たに「ユニバーサル アプリ」「WindowsPhone 8.1 アプリ」の開発が行えるようになりました。

newuniversalapps

ユニバーサルアプリはWindows8.1ストアアプリとWindowsPhone8.1アプリを同一コードで開発できるようになったテンプレートです。
今後は「XBox」も同一で行えるようにしていければというもののようです。

WindowsPhone8.1向けは、今後WP8.1を搭載した端末が4月末から5月にかけて出るようなのと、Lumia向けには夏にはWindowsPhone8から更新の形で、配布されるようです。
Lumia以外の端末に関してはいまのところ告知されていないようです。

ユニバーサルアプリですが、本当の意味で同一コードというわけではなく、同一ソリューションでプロジェクトが混在可能であり、PCL等による共通化をtemplateにしたという感じです。

hubuniapps

既存のコードを変換というのは手間になりそうな気配ですが、新規で作成したプロジェクトに移植という形であれば統一しやすいのではないかなーという感じです。

DirectX12(Direct3D12)がGDC2014で発表

DirectX11から5年ぶりのメジャーアップデート、DirectX12(Direct3D12)がGDC2014で正式に発表されました。(【GDC 2014】米MS、DirectX 12を発表。より“ダイレクト”な3D APIへ進化)

正式なリリースはまだ先ですが、今のところDirectX11GPU、ATI GCN、nVidia Fermi 、Intel Haswell以降、であればDirectX12も(ドライバ対応されれば)可能なようです。

Mobile分野ではQualcommがサポート表明しているようです。

今後さらにDirectX12に最適化された新GPUが発表されるのではないかと思います。

何が変わったかというところでは、Direct3Dのスレッド制御がよくなり、偏っていたスレッドが分散最適化、平準化され、これにより全体的に早くなっているようです。

MSDN Blogs > DirectX Developer Blog > DirectX 12 」に参考となる情報があり、「3DMark – Multi-thread scaling + 50% better CPU utilization」のところに比較が乗っています。

もちろんDirectX11ベースの物がDirectX12を入れて早くなるということではなく、DirectX12のAPIベースに移行(最適化)することで、各種オーバーヘッドの低減などの恩恵があり、早くなるということです。

なおリリース予定は、2015年のホリデーシーズンとのことですので、Windows8/8.1以降のOS対応ではないかと思いますが、Windows7も含まれるのかな?

現在DirectX12開発者先行アクセスが募集されていますので、興味のある方は申請してみてはどうでしょうか?
とはいえ、正規リリースが一年以上先なわけで、研究にしか使用できないのと、おそらくNDAによる公開制限がかかると思われますので、現状のDirectX11の習得が先かなともおもいます。

MantleなどのDirect3D対抗技術が出てきていますが、これまでのDirectX技術を利用して早くなるのであれば、それに越したことはないわけで、今後の公開が待たれます。

VS2013でストアアプリデバッグが少し変わった ※間違いがありました

山本康彦@BluewaterSoftさんからお教えいただいたのですが、「中断」「再開」「中断とシャットダウン」はVS2012からあり、デフォルトでは表示されていなかっただけだそうです。
アプリの終了方法ですが、「Win8.1では、下の方へドラッグしたら左右に振ってタイルを反転させる」を行わないと「スタートボタンを押した状態(中断)」になるそうです。
お教えいただきありがとうございます。

VS2012でストアアプリ(Windows8)をデバッグする際に、デバッグ中のアプリを通常通りの操作でドラッグして終了した場合、そのまま終了しデバッグも解除されました。

VS2013(Windows8.1)では現在のところこれで終了せずデバッグが実行中のままになります。
WindowsPhoneのデバッグのようにプロセス管理が握っており、「中断」「再開」「中断とシャットダウン」という項目が増えて、再開を追いやすくなっています。

これはかなりありがたい変更で、再開時の挙動を追うのがVS2012時は予測に頼る感じでしたが、WPのように再開時のトラブルを確認できるようになりました。

とはいえ、WPほど完全な終了処理からの復帰という感じではないため、プロセスが裏では終了している場合、再開はできないです。

デバッグを終了する場合は「中断とシャットダウン」を選択、または「デバッグの停止」でデバッグを抜けることができます。