ラズパイ4でアンドロイドTVを自作
最近のテレビでは標準装備となりつつある「ネットみれます」の機能。より分かりやすく伝えるために「ネットフリックス対応」や「テレビでYouTubeみれます」と表示されてます。早い話がテレビ (モニター+テレビ放送受信) にAndroid (WiFi+アプリ) を加えたものですね。LGではAndroidではなくwebOSだったりしますがやりたいことは一緒。別に普通に使う分には困らないんですけどAndroid TV以外では自分で自由にアプリを入れられないのが難点。YouTubeで広告表示がうっとおしいのに有料会員になる以外に回避策がない。我が家のテレビはLGですがwebOSの動作がモッサリってのも理由です。動作が遅くなったから買い替えはナンセンスなのでモニターがあればずっと使える外部Android TVを作ることにします。入力切替 ⇒ Android TVでの運用です。ラズパイ4になって「普通に使える安い小さいコンピューター」になったのは超ありがたい。
ラズパイでTVじゃないAndroidを動かしたいならこちらをどうぞ◎
必要なもの
- Raspberry Pi 4 (メモリは4ギガで十分)
- SDカード (最低でも16ギガ、クラス10)
- セットアップ用のパソコン
たったこれだけ。これさえあれば最新のAndroid TVがちょっとした手間で整います。 もしまだラズパイ4を持ってないならスターターセットがオススメです。 というのもラズパイ4の電源は5V 3AとそのへんのUSB充電器では満たせないスペックです。2アンペアでも起動はできますがそれもなかなかないんですよね。一式買ってしまうのがオススメです。
Android TVのダウンロード
ここではAndroidのカスタムROMであるLineageOS 18.1 (Android 11)を使います。なぜかウチのラズパイ4ではAndroid 10も9も起動途中でループ (Bluetoothデバイスの検索から先に進まない) ので最新版を使うことにします。
作者のKonsta氏のページの中ほどにダウンロードリンクがあるので感謝しながらダウンロード、zipを保存します。 LineageOSはAndroidベースのカスタムROMなのでGoogle非公式です。んでそのカスタムROMを優秀な人がラズパイ用に最適化したものなのでLineageOS開発チームにとっても非公式ビルドです。つまり自己責任という要素が大きいのですがラズパイ市場の大きさも手伝って情報がかなり豊富&きわめて安定。アップデートも継続されていてGitHubでも情報交換が盛んで透明性も確保されている、つまりセキュリティやプライバシーも (素人が判断する限り) 担保されてるので今後もずっと使えるOSです。 ラズパイを使ってテレビでYouTubeを楽しむのであればAndroid以外ではOpen ELEC (LibreELEC) やOSMCもあります。これらの特徴やできることはほかの記事に譲るとして、我が家のテレビはヨメと子供も使うのでAndroidというなじみ深いインターフェースを使うことで導入ハードルを下げています。
Google謹製アプリの準備
みなさんおなじみのマップやPlay ストアなどはLineageOSには含まれません。というのもグーグルアプリをAndroidにバンドルして配布するためにはGoogle社のライセンスが必要なんです。大人の事情で非公式カスタムROMには含まれてないのですが、これまた頭のいいひとたちがOpenGAppsというプロジェクトを作ってくれています。
感謝しながらここからグーグルアプリをダウンロードします。ラズパイはARM、LineageOS 18.1はAndroid 11、Android TVなのでtvstockを選択してダウンロードします。
※Konsta氏のビルドが20210306より前であればARM、この記事の時点で最新版の20211123ではARM64を選択します。opengappsがエラーでインストールできません。
SDカードにLineageOSを書き込み
ラズパイの起動ディスクを作成していきます。書き込みソフトはなんでもいいのですが公式のPi Imagerを使用します。
起動するとシンプルな画面が表示されます。
OSを選んで ⇒ 書き込み先を指定して ⇒ クリックするだけの親切設計。ダウンロードしたimgを書き込むのでCHOOSE OSでは一番下のUse customから解凍してできた.imgを選択します。CHOOSE STRAGEでSDカードを選択、Writeを押すだけです。
ラズパイでLineageOSを起動
SDカードをラズパイにさして電源いれるだけ。タッチスクリーンがあるならスムーズですが戻るボタン付きマウスでも問題なく操作できます。こんなに簡単なんでもっとラズパイって日本でも普及してもいいと思うんですけどね。 起動時は英語になっているのでApps ⇒設定 (歯車) ⇒ Device Preferences ⇒ Language ⇒ 日本語にしておきます。
リカバリーモードで再起動
GAppsをサクッとインストールできればいいのでしょうがそうもいかず、リカバリーモードを有効にします。設定 ⇒ システム ⇒ Buttons ⇒ Advanced rebootをONにします。 この状態で再び設定 ⇒ 再起動を選ぶとRecoveryが出現するのでクリック、リカバリーモードで起動します。再起動の前にzipファイルのままのGAppsを移したUSBメモリをラズパイにさしておくのをお忘れなく。
GAppsのインストール
起動が完了すると見慣れない画面になりますので、Swipe to Allow Modificationsのスライダーを右までもっていきます。
リカバリーモードのホーム画面に移ったらMountを選択、zipファイルのままのGAppsを移したUSBメモリが刺さっていることを確認して、Boot、System、Data、USBの4つを選択してSelect Storageをクリック、USBを選択します。
ホーム画面に戻ってInstallをクリックするとUSBの中に先ほどの.zipがあるのでクリック、ここでも同じようにスライダーを右までスライドしてインストールします。 数分かけてインストールが終わったらWipe DalvikでもRebootでもなくホームボタンをクリックして、Wipeを選択、Swipe to Factory Resetをスライドして完了後Reboot Systemを選択します。
Android TV (GAppsアリ) 起動
最初の画面でリモコンセットアップの画面がでてきます。リモコンなんて使ってないのでF4キーでスキップします。そのあとは新しいスマホを買った時と同様に無線LANやグーグルアカウントを設定していきます。途中で位置情報使う?と聞かれますがラズパイにはGPSついていないのでWiFiからのロケーションの推定になります。YesでもNoでもどちらでも大丈夫です。 設定が終わると先ほどよりもホーム画面がにぎやかになったと思います。ここまで来たらほぼ完了、残すステップはあとひとつです。ちなみに途中でgoogleアカウントへのログインがあり日本語キーボードだと@が入力できない事態になりますが@gamil.comは省略可能です。
※Konsta氏のビルドが20210306より前であればF1キーでリモコン設定がスキップされます。
ストレージの最適化
初期のインストールのままだとAndroid TVが認識している容量はSDカードのサイズに関わらず5ギガになっています。まぁここのままでも困らないかもですがフルに使えるようにします。
再び感謝しながらKonsta氏のAndroid File Hostのルートフォルダにとんで、Rpi-Common/LineageOS18/lineage-18.1-rpi-resize.zipをダウンロードします。zipのままUSBにコピーして同じようにリカバリーモードで起動、USBメモリをマウントしてインストールします。
Swipe to confirm Flashを右にスワイプしてインストール完了後Rebootをクリック、通常起動でいいのでSystemで再起動すれば最新のAndroid 11を搭載したAndroid TVの準備完了です◎
ちなみにAndroid TVで広告なしのYouTubeを見ようと思ったらSmart YouTube一択です。Playストアにはおいてないので自分でapkをダウンロードする必要があります。USBに入れてさせばAndroid TVの右上に「USBストレージあるよ」の通知が出るのでapkを選択、インストールできます。
ネットで売っている中華Android TV BOXの中には「自分はAndroid 10ッス」って言っているだけで中身は8なものが出回ったりしています。簡単にラズパイで自作したほうが自由にカスタムできるしずっと使えるのでメリットしかないですね。
ちなみにラズパイと相性がいいキーボードはコチラです。我が家ではこれをずっと使っています。
フリーズ対策
我が家では基本問題なく動いてくれいているのですが1週間に1回くらい外部入力をラズパイにすると真っ黒な画面のことがあります。電源ケーブル引っこ抜きにテレビのそばまで行くのがめんどくさいので自分で自分を監視する機能「ウォッチドッグタイマー」を使ってフリーズしたら再起動させるとします
$ sudo nano /boot/config.txt
//一番下に追記
dtparam=watchdog=on
// 新たに1行だけ記載された.confファイルを作成
// ハートビートが10秒間ないと再起動するように記載
$ sudo nano /etc/modprobe.d/bcm2835-wdt.conf
options bcm2835_wdt heartbeat=10 nowayout=0
//ハートビートの有効化(5秒)
$ sudo nano /etc/systemd/system.conf
RuntimeWatchdogSec=5
$ sudo reboot
これでフリーズたときに再起動してくれるようになりました。
コメント
わかりやすく説明されており、迷うことなく出来ました。
ひとつ残念なのが、自分の環境のせいかもしれませんがキャスト機能が使えないことです。
コメントありがとうございます。
キャストですが、残念ながらラズパイに限らずLineageOSでは使えないようです。なんでもGoogleが認証を受けていないのAndroidデバイスには許可していないとか。ちょっと残念ですよね・・・私も頭のいい人たちのアップデートを待ってます。