Visual Studio を使って .NET で Android アプリを作る方法を以前に書きました。
rksoftware.hatenablog.com
rksoftware.hatenablog.com
今回は、Visual Studio なしでやっていこうと思います。
■ プロジェクトテンプレートのインストール
まず Android のプロジェクトテンプレートをインストールします。
search でテンプレートを探します。
> dotnet new search android テンプレート名 短い名前 作成 言語 パッケージ ダウンロード ------------------ --------------------------------------- ------------- ---- ---------------------------------------------------------------------------------- ------------ (省略) Android Activit... android-activity Microsoft [C#] Microsoft.Android.Templates 55k Android Applica... android Microsoft [C#] Microsoft.Android.Templates 55k Android Class L... androidlib Microsoft [C#] Microsoft.Android.Templates 55k Android Java Li... android-bindinglib Microsoft [C#] Microsoft.Android.Templates 55k Android Layout ... android-layout Microsoft [C#] Microsoft.Android.Templates 55k (省略)
Microsoft.Android.Templates というパッケージだと分かりました。インストールします。
> dotnet new install Microsoft.Android.Templates 次のパッケージがインストールされます: Microsoft.Android.Templates 成功: Microsoft.Android.Templates::32.0.476により次のテンプレートがインストールされました。 テンプレート名 短い名前 言語 タグ ---------------------------- ------------------ ---- -------------- Android Activity template android-activity [C#] Android/Mobile Android Application android [C#] Android/Mobile Android Class Library androidlib [C#] Android/Mobile Android Java Library Binding android-bindinglib [C#] Android/Mobile Android Layout template android-layout [C#] Android/Mobile Android Wear Application androidwear [C#] Android/Mobile
インストールできました。
■ プロジェクトを作成
テンプレートをインストールしたのでプロジェクトを作成します。
> dotnet new android
出来上がったファイル群を見てみます。
> ls ディレクトリ: C:\XXXXXXXXXXXX\Android\AndroidApp1 Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2022/10/19 0:32 Resources -a---- 2022/10/19 0:32 492 AndroidApp1.csproj -a---- 2022/10/19 0:32 386 AndroidManifest.xml -a---- 2022/10/19 0:32 356 MainActivity.cs
きちんとできています。Activity のコードを見てみます。
> cat .\MainActivity.cs namespace AndroidApp1; [Activity(Label = "@string/app_name", MainLauncher = true)] public class MainActivity : Activity { protected override void OnCreate(Bundle? savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.activity_main); } }
ちゃんと .NET で書かれた Activity ですね。間違いないです。
■ ビルド
ビルドしてみます。
> dotnet build MSBuild version 17.4.0-preview-22428-01+14c24b2d3 for .NET 復元対象のプロジェクトを決定しています... C:\Program Files\dotnet\sdk\7.0.100-rc.1.22431.12\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.ImportWorkloads.targ ets(38,5): error NETSDK1147: このプロジェクトをビルドするには、次のワークロードをインストールする必要があります: android [C:\XXXXXXXXXXXX\Android\AndroidApp1\AndroidA pp1.csproj] C:\Program Files\dotnet\sdk\7.0.100-rc.1.22431.12\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.ImportWorkloads.targ ets(38,5): error NETSDK1147: これらのワークロードをインストールするには、次のコマンドを実行します: dotnet workload restore [C:\XXXXXXXXXXXX\Android\AndroidApp1 \AndroidApp1.csproj] ビルドに失敗しました。 C:\Program Files\dotnet\sdk\7.0.100-rc.1.22431.12\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.ImportWorkloads.targ ets(38,5): error NETSDK1147: このプロジェクトをビルドするには、次のワークロードをインストールする必要があります: android [C:\XXXXXXXXXXXX\Android\AndroidApp1\AndroidA pp1.csproj] C:\Program Files\dotnet\sdk\7.0.100-rc.1.22431.12\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.ImportWorkloads.targ ets(38,5): error NETSDK1147: これらのワークロードをインストールするには、次のコマンドを実行します: dotnet workload restore [C:\XXXXXXXXXXXX\Android\AndroidApp1 \AndroidApp1.csproj] 0 個の警告 1 エラー 経過時間 00:00:00.99
ワークロードのインストールをしろと言われました。インストールします。
> dotnet workload restore ワークロードをインストールしています: android (省略)
進捗表示が文字化けしていましたが特に何も起こらず無事完了しました。結構かかります。
もう一度ビルドチャレンジ。
> dotnet build MSBuild version 17.4.0-preview-22428-01+14c24b2d3 for .NET 復元対象のプロジェクトを決定しています... (省略) �o�ߎ��� 00:00:39.00
文字化けしていますが成功しました。
■ 実行
このコマンドで実行できないとは分かりつつ、まずは普通に run してみます。
> dotnet run MSBuild version 17.4.0-preview-22428-01+14c24b2d3 for .NET 復元対象のプロジェクトを決定しています... 復元対象のすべてのプロジェクトは最新です。 C:\Program Files\dotnet\sdk\7.0.100-rc.1.22431.12\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIdentifierInferen ce.targets(219,5): message NETSDK1057: プレビュー版の .NET を使用しています。https://aka.ms/dotnet-support-policy をご覧ください [C:\XXXXXXXXXXXX\An droid\AndroidApp1\AndroidApp1.csproj] AndroidApp1 -> C:\XXXXXXXXXXXX\Android\AndroidApp1\bin\Debug\net6.0-android\AndroidApp1.dll C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\32.0.465\tools\Xamarin.Android.Common.Debugging.targets(611 ,5): error XA0010: No available device. [C:\XXXXXXXXXXXX\Android\AndroidApp1\AndroidApp1.csproj] ビルドに失敗しました。 C:\Program Files\dotnet\packs\Microsoft.Android.Sdk.Windows\32.0.465\tools\Xamarin.Android.Common.Debugging.targets(611 ,5): error XA0010: No available device. [C:\XXXXXXXXXXXX\Android\AndroidApp1\AndroidApp1.csproj] 0 個の警告 1 エラー 経過時間 00:00:02.99
動きません。別の方法をとります。
■ adb でインストール
まずはビルドした結果の apk ファイルを探します。
> ls .\bin\Debug\net6.0-android\ ディレクトリ: C:\XXXXXXXXXXXX\Android\AndroidApp1\bin\Debug\net6.0-android Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2022/10/19 2:05 5632 AndroidApp1.dll -a---- 2022/10/19 2:05 11772 AndroidApp1.pdb -a---- 2022/10/19 2:05 1011 AndroidApp1.runtimeconfig.json -a---- 2022/10/19 2:05 136 AndroidApp1.xml -a---- 2022/10/19 2:06 9425880 com.companyname.AndroidApp1-Signed.apk -a---- 2022/10/19 2:05 9413369 com.companyname.AndroidApp1.apk
ありました。
次に adb でインストールするデバイスを確認します。今回はエミュレータです。
adb は Visual Studio の ツール > Android > Android Adb コマンド プロンプト...
で使えます。
>adb devices List of devices attached emulator-5554 device
エミュレータ一つが見つかりました。このエミュレータにインストールします。
※次の手順ではうまくいきませんでした。どうもデバイスを指定しない (-s オプションを使わない) 場合はうまくいきそうです。
>adb -s emulator-5554 install "C:\XXXXXXXXXXXX\Android\AndroidApp1\bin\Debug\net6.0-android\com.companyname.AndroidApp1-Signed.apk" Performing Streamed Install Success
インストールできました。
アイコンタップで起動します。
アプリが実行されました。しかし、一瞬でアプリが落ちてしまいます。画面中央も真っ白です。
きちんと起動すれば次の画面になるはずです。
成功するインストールコマンドはこちら。-s オプションのデバイス指定をしていません。なぜデバイス指定するとうまくいかないのかは、ちょっと分かっていません......。
>adb install "C:\Sample\Android\AndroidApp1\bin\Debug\net6.0-android\com.companyname.AndroidApp1-Signed.apk" Performing Streamed Install Success
■ デバイス指定について
デバイス指定をせずにインストールできるのは、デバイスが一つしかつながっていない場合です。例えば二つつながっていると次のようにエラーになります。
>adb devices List of devices attached 127.0.0.1:58526 device emulator-5554 device >adb install "C:\XXXXXXXXXXXX\Android\AndroidApp1\bin\Debug\net6.0-android\com.companyname.AndroidApp1-Signed.apk" adb.exe: more than one device/emulator
そんなときはデバイスはコマンドから接続を切れるので、一つを残して切断してしまいましょう。
>adb disconnect 127.0.0.1:58526 disconnected 127.0.0.1:58526
■ 簡単ですね
簡単ですね。