なんかいろいろしてみます

Apr 24, 2019 - 1 minute read - ARM64

ARM64版WindowsでUnityのARM64版UWPを動かしたい

HoloLens 2ではx86のCPUからARM64へと変更になるらしいです.

今後の動作確認のためARM64版WindowsでVisual StudioとUnityで作成したARM64版UWPアプリを動かしてみます.

実行環境

  • Lenovo Yoga C630
  • CPUにSnapdragon 850を搭載

アプリ作成環境

  • 64bit Windows 10のパソコン
  • Visual Studio 2017
  • Unity 2019.1

ARM64版Windowsの特徴

  • ARM64のCPUだけどx86版アプリが動作可能
  • ただしx64アプリは実行できない+x64に依存している機能(Hyper-Vなど)は実行できない
  • Bash on WindowsでUbuntuは実行できた
  • Visual Studio 2017はインストール,実行可能
  • Unityはx86版が存在していたUnity 5.x系はインストール,実行可能
  • Unity 201x系からx64版のみとなったのでインストールできなくなった

  • 標準でWindows 10 Sなので開発用アプリが実行できるようにWindows 10の開発者モードに変更します.

  • UnityでARM64のUWPアプリ作成に対応しているのはUnity 2019.1からなのでARM64版Windowsで開発できません.

  • 今回はアプリの作成+ビルドは別PCで行い,パッケージをARM64版Windowsにインストールします.

Visual Studio編

  • Visual Studio 2017単体でARM64版UWPアプリを作成してみます.
  • ARM64版UWPはWindowsの最小バージョンが16299以降になります.
  • C#のUWPプロジェクトを作成しソリューションプラットフォームをARM64に変更してビルド+パッケージ化を行います.

パッケージ方法

  • パッケージ化は「プロジェクト/ストア/アプリパッケージの作成」を選択
  • 「サイドロード用のパッケージを作成します.」を選択し次へ
  • パッケージの選択と構成から「ARM64」にチェックを入れ作成を行う.

ARM64版でビルド時に警告表示が出る場合

  • [プロジェクト名].csprojをエディタで開き以下を追加することで警告を回避できます.(エディタはVisual Studio Codeを利用しています)
  • 変更後プロジェクトの更新を行うダイアログが表示される場合には「すべて適応」から変更を適応します.

Unity編

  • Unity 2019.1からARM64版UWPビルドが可能になりました.
  • ただしUWPビルドはIL2CPPのみのビルドサポートとなったので,出力されたVisual Studioプロジェクトはc++プロジェクトとなります.
  • Build SettingからPlatformをUWPに変更し,Buildを行いVisual Studio用プロジェクトを作成します.
  • Minimum Platform Versionを10.0.16299.0以降に設定します.
  • 生成されたVisual Studioプロジェクトを開きソリューションプラットフォームをARM64に切り替えます.
  • C#プロジェクトと同様にビルド+パッケージ化を行います.

ビルド時に以下の警告表示が出る場合

  • C#プロジェクトと同様の警告が出る場合があります.
エラー	MSB3273
不明なプロセッサ アーキテクチャです。
"C:\Program Files\Unity\Hub\Editor\2019.1.0b4\Editor\Data\PlaybackEngines\MetroSupport\Players\UAP\il2cpp\ARM64\Debug\UnityPlayer.winmd" の実装ファイル "C:\Program Files\Unity\Hub\Editor\2019.1.0b4\Editor\Data\PlaybackEngines\MetroSupport\Players\UAP\il2cpp\ARM64\Debug\UnityPlayer.dll" の ImageFileMachine 値は "0xAA64" でした。
この実装ファイルを使用する場合は、プロジェクトの "ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch" プロパティに "警告" または "なし" を設定してください。

[プロジェクト名].vcxprojをエディタで開き以下を追加することで警告を回避できます.

106107
<PropertyGroup>
  <ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>None</ResolveAssemblyWarnOrErrorOnTargetArchitectureMismatch>

パッケージのインストール

  • 通常のUWPデスクトップアプリのインストール手順と同じです.
  • アプリ作成用パソコンで出力したパッケージファイルをARM64版Windowsパソコンにコピーしインストールを行います.
  • Add-AppDevPackage.ps1を右クリックからPowerShellで実行してパッケージをインストールします.

まとめ

  • Visual Studio 2017で作成したC#プロジェクトのARM64版UWPアプリを実行できました.
  • Unity 2019で作成したC++プロジェクトのARM64版UWPアプリを実行できました.
  • ARM64版UWPアプリはARM64版Windowsでないと動作確認できないです.
  • x86対応ソフトは問題なく動作可能(すごい)
  • 最近はx64アプリが多い