XamarinでもAndroid TVアプリが作りたい
Created at:
XamarinがついにVisual Studioの一部となって、Visual Studio利用者であれば追加コストなしで使えるようになりました。Starterではなくてサイズ制限のないフル機能を使えるのでまともな開発ができます。
Xamarinの良し悪しや意義とかは置いておくとして、Androidアプリの開発ができるということはAndroid TVのアプリも作れるということなのでデバッグ実行するまでの流れを試してみました。SonyのBRAVIA(2015)での手順ですがBRAVIA以外のAndroid TV(Nexus Playerなど)でも大体同じ流れだと思います。
動かすアプリはXamarinのデフォルトテンプレートで出来るもの(ボタンを押すとカウントが増えるもの)をそのまま使うことにします。
テレビ(Android TV)側の設定と接続
まずはテレビ側でデバッグをできるように設定します。と言ってもほぼ普通のAndroidと同じです。
- 設定から端末情報→ビルドの項目を連打して開発者向けオプションを有効にする
- システム機能設定カテゴリの開発者向けオプション→デバッグ→ADBデバッグを「入」
Get started | Sony Developer Worldにも詳しく書いてあります。
つぎにコンピューターからadbコマンドからテレビに接続します。
なお、adbコマンドはXamarin.Androidとともにインストールされたものは%LOCALAPPDATA%\Android\android-sdk\platform-toolsにあります。
|
この adb connect に指定するIPアドレスはテレビのIPアドレスです。ネットワーク設定あたりから確認できます。
|
コマンドが成功するとコンピューター側には何も出ませんが、テレビ側にUSBデバッグの許可を求めるダイアログが出るのでOKを押してください。
テレビ側で許可をして adb devices で接続したIPのデバイスが出てくれば完了です。
|
後はVisual Studioのデバッグ実行ボタンにターゲットとしてテレビが出てくるのでクリックするとテレビにアプリがデプロイされてデバッグ実行されます。なお、初回時は共有ライブラリをインストールするのでちょっと時間がかかります。

アプリケーションをAndroid TV対応にする
アプリケーションをテンプレートから作ったままだと、Android TV感のない単なるAndroidアプリになる上にホーム画面にも出てこない状態ですので少々対応が必要です。

まず、Android TVの機能を含むライブラリ(v17 Leanback Library)やテーマを使えるように、Xamarin Components StoreからAndroid Support Library V17 Leanbackをインストールします。このコンポーネントをダウンロードするにはXamarinアカウントが必要です。
ちなみにAPI中でLeanbackという言葉が出てきたらそれはAndroid TV的なものを指しています。
そして次にアクティビティにテーマを設定します。
アプリケーションに一括でAndroid TV向けテーマを適用する場合にはAndroidManifest.xmlのapplication要素にtheme属性を追加します。
|
もしアクティビティ単位で適用したいのであれば、アクティビティのクラスについているActivityカスタム属性のThemeプロパティを設定します。
|
これでタイトルバーが消えたり、ボタンがフラットになったりと見た目がAndroid TV向けっぽくなります。

次にホームにアプリケーションを起動するアイコンというかタイルというかを表示するためのコードを追加します。Android TV向けのアプリケーションはホームから起動できるということを明示的に設定する必要があり、何も指定しないと表示されません。
設定は起動対象としたいアクティビティ、大抵はActivityカスタム属性のMainLauncherプロパティがtrueになっているアクティビティにIntentFilterカスタム属性を追加します。
|
IntentFilterでカテゴリがCategoryLeanbackLauncherのActionMainを捕まえられるようにするという感じです。
これでホームにアイコンが出てくるようになります。

ということで準備はできたのであとは頑張ってアプリを作るだけです。
Visual StudioでF5を押すとテレビにアプリを転送、起動してブレークポイントでブレークできるというのはなかなか面白い体験です。そもそもテレビにadbで接続してshellを叩けるという時点で不思議体験でもあります。
ぜひ皆さま、Android TVを買ってC#で開発しましょうということでたまにはアフィリエイトおいておきますね。
ソニー 地上・BS・110度CSデジタルハイビジョン液晶テレビ BRAVIA X8500C 55V型 KJ-55X8500C