ユーザ用ツール

サイト用ツール


ハイハイスクールアドベンチャー_.net_maui版

文書の過去の版を表示しています。


ハイハイスクールアドベンチャー .NET MAUI版

あらすじ

2019年神奈山県立ハイ高等学校は 地盤が弱く校舎の老朽化も進んだため、 とうとう廃校にする以外方法がなく なってしまった。

ところで大変な情報を手に入れた。 それは、

「ハイ高校にATOMIC BOMBが仕掛けられている。」

と、いうものだ。 どうやらハイ高が廃校になった時、 気が狂った理科の先生がATOMIC BOMBを 学校のどこかに仕掛けてしまったらしい。

お願いだ。我が母校のコナゴナになった 姿を見たくはない。 早くATOMIC BOMBを取り除いてくれ……!!

行動は英語で、“<動詞>” 或いは、“<動詞>”+“<目的語>“のように入れていただきたい。 例えば、”look room”と入れれば部屋の様子を見ることが出来るという訳だ。

それでは Good Luck!!!…………

概要

.NETのフレームワークは Xamarinから MAUIへと移行し、現在はMAUIが標準のフレームワークとなっています。 対応するプラットフォームは Windows, MacOS, iOS, そして Androidとなっており、ひとつのコードベースで様々なプラットフォームで動作させることが可能です。

AvaloniaUIもQtも似たようなところを目指いしていますが、リソースファイルの扱いなどが、.NET MAUIがよくできているように感じました。

以前、Xamarinでハイハイスクールアドベンチャーを動作させられるかどうか調べたとき、キモとなるビットマップを表示する機能が脆弱だった1)ため、断念したのですが、AIに聞くと「できます」っていうので、できるんならやったろうか、ということで、移植を開始したわけです。

確かに画像の表示ができるようになるまでは比較的早く、ゲームがただプレイできるだけなら二日もかからずに可能になったのですが、そこからあれこれやりだしたら壁にぶつかりまくりで大変でした。

.NET MAUIの利点

マルチプラットフォーム対応

比較的少ない労力で、Windows と Androidで動作するようになりました。 レイアウトの調整などもっと手間取るかと思ったんですが、そんなこともなく、それなりの見た目になりました。

MacOSやiOSではどうなるのか興味はありますが、テストする環境もないので特には確かめていません。

.NET MAUIで苦労した話

UIのカスタマイズは制約がある

Windows版のパッケージングは金がかかる

Windows版については、デフォルトでWiX Toolsetでインストーラまで作成してくれるので一見便利だ。 だが生成されたインストーラは、適切に署名されていないと、他のPCはおろか開発してるPCですらインストールできない。 そして適切な署名を得るには金がかかるのだ。

個人で、フリーソフトの開発して、それを再度ローディング用に配布するのに、なんで金払ってまでやらないといけないのさ?

なので、WPFや AvaloniaUIでやったみたいに、publish(発行)して、パッケージングだけなしにしてもらって、Inno Setup 6かなにかでパッケージングすればいいんじゃなかろうかと思ってそのようにしようとしたら、今度は Visual Studio 2022からは発行できなくなりました。

とりあえずプロジェクトファイルに加える設定はつぎのよう。

<PropertyGroup>
	<WindowsPackageType>None</WindowsPackageType>
	<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
</PropertyGroup>

最初は真面目に、ターゲットフレームワークが Windowsの時だけこれが設定されるようにとかしようと思ったんですが、なぜかうまくきかなくて、普通に共通の設定に混ぜちゃいました。 よくよく考えてみれば、WindowsPackageTypeだのWindowsAppSDKSelfContainedだのはWindows以外では無視されるので、分ける必要は皆無だってことに後から気づきました。

とはいえ、この設定をして、ターゲットを Windows Machineにすると、「発行」メニューがグレーアウトして選べないのです。

なので、とりあえずはコマンドラインからやるしかないのです。

C:\Users\foo\source\HHSAdvMAUI> dotnet publish -c Release -f net9.0-windows10.0.19041.0 --self-contained true

-fでフレームワークを指定する必要があるなど、少々癖が強い2)けれど、これでpublishはできるので、あとはそれをパッケージングしてやればいい。

Android版のパッケージングは鍵がいる

Android版も、ストアアプリにする予定じゃなくても、できるパッケージは黙ってれば aabになってしまうのです。 これではサイドローディングできません。

これもプロジェクトファイルに出力タイプを指定して apkにすることはできます。

<AndroidPackageFormat>apk</AndroidPackageFormat>

ただ、これで生成されるAPKはインストールできません。 無署名だからです。

Androidもパッケージに署名がいるのですが、別にこちらは金を払って公式な署名をする必要はありません。 オレオレ署名で問題なしです。

まずはキーストアをつくります。

$ keytool -genkey -v -keystore keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias keyalias

keystore.jksとか keyaliasは適切なものにしてください。 パスワード一回しか聞かれませんが、キーとストアの両方が一度にできます。

キーができたら、プロジェクトファイルに署名のための設定を追加します。 但し、csproj本体にやっちゃうと、プロジェクトをgitなどで公開したくなったときに困るので、csproj.userの方に書いて、.gitignoreなどで公開除外することをお勧めします。

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
    <AndroidKeyStore>true</AndroidKeyStore>
    <AndroidSigningKeyStore>keystore.jks</AndroidSigningKeyStore>
    <AndroidSigningKeyAlias>keyalias</AndroidSigningKeyAlias>
    <AndroidSigningKeyPass>xxxxxxxx</AndroidSigningKeyPass>
    <AndroidSigningStorePass>xxxxxxxx</AndroidSigningStorePass>
  </PropertyGroup>

ご覧のようにパスワードべた書きになるので、間違って公開されないようにご注意ください。

あとは普通にpublishしてやれば APKが得られます。

Matrial You対応

画面遷移は戻れない

Windows版の発行は自己内包型で

1)
ビットマップを直接表示はできず、BMPなどの画像ファイル形式に変換したのち、メモリストリームを介するなどしないと表示できなかった。多分今も標準のフレームワークではそう。
2)
おまけにWindowsだけ net9.0-windowsではなく、後ろにリビジョン番号がくっついてて面倒くさい。
ハイハイスクールアドベンチャー_.net_maui版.1761465117.txt.gz · 最終更新: by araki