2020/8/12 21:10追記
この記事を書いた数時間後、MicrosoftよりSurface Duoについて発表がありました。
この記事によると、$1399で9/10より販売開始、MDM、Enterprise、Surface Duo experience for employees and protect work dataなどの用語があることから、この発表では民生向けではなく企業向けの販売を意識しているようにみえます。 (民生向け販売をするかは記事からはわからず)
あと、US Onlyなのか、そうでないかも読み取れませんでした。
日本で発売されたら試したいなと思いますが、もう少し状況みてからですね。
Surface Duoというタブレットが近日発売されるという噂があります。
元々は発売は2020年のホリデーシーズン (冬頃?)と言われていましたが、どうやら早くなる可能性があるらしいです。
そこで、Surface Duo のアプリ開発方法を調べてみました。元がAndroidなので開発方法はいろいろありますが、今回は一部がUnityに対応しているのを見つけたので、Unityで開発する方法を調べてみました。
これは2020/8/12時点に試したPreview版の試行結果です。今後Surface Duoの開発方針変化があった場合、ここに書かれている内容ではできない可能性があります。あらかじめご了承ください
試した環境
MacOS X 10.15.6
Android Studio 3.6.3
Windows10、Linux (Ubuntu、Debian)でも実行できるようですが、この記事では省略します。
- 1. Surface Duoとは?
- 2. Surface Duoのエミュレータ環境構築方法
- 3. Surface Duo向けアプリについて
- 4. Unity向けのSurface Duoサンプルコードを確認する
- 5. ホッケーゲームのサンプルコードを試してみる
- 6. おわりに
1. Surface Duoとは?
2画面のAndroidタブレットです。公式サイトではプロモーションムービーで紹介されています。
当然ながら現時点では実機がないですが、エミュレータは公開されており、それを使うことで最低限の動きは確認できます。
2. Surface Duoのエミュレータ環境構築方法
Microsoft が詳細なドキュメントを後悔しています。こちらにあります。
英語版
Get the Surface Duo SDK - Dual-screen | Microsoft Docs
日本語版
Surface Duo SDK を入手する - Dual-screen | Microsoft Docs
エミュレータを起動させるまでの大まかな手順は以下の通りです。
(1) Android Studioをインストール
(2) Android StudioのSDK Managerを使って必要なツールをインストール
(3) Surface Duo SDKをダウンロード
(4) ダウンロードしたファイルを解凍し、中にあるrun.shを実行→Surface Duo エミュレータが起動する
2.1 Android Studioをインストール
インストール方法は色々紹介されているのでとくに説明不要と思いますが、以下の公式リンクよりインストーラをダウンロードし、画面の指示にしたがってインストールします。
Install Android Studio | Android Developers
2.2 Android StudioのSDK Managerを使って必要なツールをインストール
Surface Duo SDK プレビューの前提条件
SDK マネージャーを使用して、必要なすべての開発ツール (Android SDK Build-Tools、Android SDK Platform-Tools、Android Emulator) を確実に最新の状態にします。
引用元:Surface Duo SDK を入手する - Dual-screen | Microsoft Docs
これは、以下の赤枠にチェックをつけてインストールします。Android StudioのSDK Managerを起動して、SDK Platforms、SDK Toolsを選択し、それぞれチェックをつけます。
2.3 Surface Duo SDKをダウンロード
以下のURLにアクセスし、"Download"ボタンを選択します。
Download Surface Duo SDK Preview Release from Official Microsoft Download Center
今回はMacを選択しました。
2.4 ダウンロードしたファイルを解凍し、中にあるrun.shを実行
dmgを実行すると、中身がマウントされます。 (Windows10の場合、exeを実行して自己解凍されるはず)
中には、"com.microsoft.device.display.displaymask.jar"、"SurfaceDuoEmulator_2020.710.3"(フォルダ)が入っています。階層構造をそのままにして、この2つを任意の場所にコピーします。
ターミナルを開き、以下のように実行します。以下はDesktopにコピーした場合です。
$ pwd /Users/username/Desktop/SurfaceDuoEmulator_2020.710.3 $ ./run.sh
これにより、Surface Duo エミュレータが起動します。
私が調べた限りでは、エミュレータはここから起動するしかなく、ターミナルを終了させると消えます。
3. Surface Duo向けアプリについて
アプリにはいくつかの画面パターンがあります。こちらの画像の通りです。
引用元:Android アプリを Surface Duo に対応させる - Dual-screen | Microsoft Docs
このドキュメントをみると、Extended Canvas (拡張キャンバス)からCompanion Pane (コンパニオンペイン)まで、簡単な説明とサンプルコードのGitHubリンクがあります。
それぞれ、Java、Kotlin、Xamarinの3種類のコードが準備されています。 (全部確認したわけではないので、一部は準備されていない可能性があります)
この中で、Dual View (デュアルビュー)だけは、Unity、Flutter、React Nativeのサンプルコードのリンクが書かれています。たとえば以下URLのReadmeには、それぞれのリンクが提供されています。
今回はこの中からUnityのサンプルを使ってみます。
4. Unity向けのSurface Duoサンプルコードを確認する
以下のGitHubからクローン (またはzipダウンロード)します。
この中には、duo-android-plugin、duo-screenhelperという2つのフォルダがあります。前者はヒンジ部分のセンサー値をUnityで使うためのネイティブプラグイン用のAndroid Studioプロジェクトです。後者はUnityプロジェクトです。
エミュレータを起動させるだけならば後者だけで問題なかったので、Unity側を説明します。
Readmeによると、Unity2018.f1が必要とあるので、該当するバージョンを準備します。
Unityでduo-screenhelperフォルダを開き、Android用のビルド設定をします。ここは情報が多数あるので省略します。特別なことはありませんでした。
ただし、Build Setting / Other Settings / IdentificationのMinimum API Level、Target API LevelをAPI Level29にしておきます。Microsoft DocsではAPI Level30のようにすると読めましたが、30にしておくと、apkをエミュレータにインストールするときにエラーが出て失敗しました。
$ adb install surfaceduo-test.apk Performing Streamed Install adb: failed to install sfdu.apk: Failure [INSTALL_FAILED_OLDER_SDK: Failed parse during installPackageLI: /data/app/vmdl416041757.tmp/base.apk (at Binary XML file line #8): Requires newer sdk version #30 (current version is #29)]
UnityでBuildすると、指定した場所にapkが生成されます。Surface Duoエミュレータが起動したままだと、"emulator-5578"デバイスとして認識されています。
$ adb devices List of devices attached emulator-5578 device
エミュレータにapkをインストールするには2つの方法があります。
(1) adb installコマンドを使う
エミュレータが起動している状態で以下を実行 (Unityでtest.apkを生成した場合)
$ adb install test.apk Performing Streamed Install Success
(2) Unity側でRun DeviceをSurface Duo Emulatorに指定し、Build and Runを実行する
Run Deviceの場所は以下の通りです。
インストール後、エミュレータからDuoSampleというアプリを実行すると、画面サイズを取得した結果が表示されます。
ちなみに、この章のはじめに紹介したduo-android-pluginというAndroid Studioプロジェクトを実行して生成されたaarをAssets/Plugiins/Androidに入れると、HingeSensorの値を取れるようになります。アプリが起動したときの表示が変わります。(実機でないとはっきりした違いが分かりませんが、、)
GitHubのReadmeにはこのように書いてあります。
This Android library project emits SurfaceDuoHingeSensorPlugin.jar in the /library/release/ directory.
しかし、実際はSurfaceDuoHingeSensorPlugin.jarというものは生成されず、duo-android-plugin/library/build/outputs/aar/library-release.aarを使うことでうまくいきました。
5. ホッケーゲームのサンプルコードを試してみる
さらに探してみると、Surface duo向けにUnityで作ったゲームサンプルもありました。
ただ、GitHubのReadmeの画像ではきちんと表示されているのに、実際にエミュレータで実行させてみるとなぜかDual Screenになりませんでした。
dual screenにならないのはUnityのサンプルコードでも同様だったので、何か設定が足りないのかもしれません。
6. おわりに
最低限ですが、Surface Duoについてまとめてみました。実機を購入できたら、もう少し調べてみたいと思います。