ページ

2017年11月28日火曜日

AmazonFireTV上で動くアプリを作る


FireTV用のアプリは大きく
  • Androidアプリ
  • Webアプリ
の2つある。

FireOS用と通常アプリの違い

  • FireOS
    AndroidからフォークされたOS
    (拡張範囲はLollipopおよびバックポートされたMarshmallowコードまで)
  • Fire TVでは、AndroidのLeanback Support Libraryが一部サポートされている
    CATEGORY_LEANBACK_LAUNCHERがFire TVでは認識されない
  • Google Play Servicesが使用できない
詳しくはこちら

:computer:環境構築


通常のAndroidアプリの様にAndroidStudioを使う

ADB接続

  1. Amazon Fire TVでデバッグを有効にする
  2. Android Debug Bridgeを設定する
  3. 接続
sh
$ adb kill-server
$ adb start-server
$ adb connect <IPアドレス>
詳しくはこちら

:pencil: 実装


簡単なサンプル

サンプリとしてFire App Builderが公開されている
詳しくはこちら

AndroidTV

ベースはAndroidTVでいけるらしいので、
簡単なサンプルをAndroidTV用プロジェクトで作成してみる。
  1. 新規プロジェクトでTarget DeviceをTVにする
  2. 「Add No Activity」を選択
  3. 「MainActivity」を作成
    java
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    }
    
  4. activity_main.xmlを作成
    xml
    <?xml version="1.0" encoding="utf-8"?>
    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:app="http://schemas.android.com/apk/res-auto"
              xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_browse_fragment"
              android:name="com.slowhand.androidtvsample.MainFragment" android:layout_width="match_parent"
              android:layout_height="match_parent" tools:context=".MainActivity" tools:deviceIds="tv"
              tools:ignore="MergeRootFrame" />
    
  5. MainFragmentを作成
    java
    public class MainFragment extends BrowseFragment {
    
        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
        }
    }
    
とりあえずここまでで何も表示されない画面ができる
image.png (152.1 kB)
BrowseFragment
HeaderFragment (ヘッダー) が右側、 RowsFragment (コンテンツ部分) が左側の構成を含むFragment

AndroidManifest.xml

Launcherとして表示させるには以下の様に修正
xml
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />