AndroidエミュレーターでNativeScript-Vueアプリを起動するまでの手順

# 概要

nativescript-vueアプリの開発中に期間が開くと、Andoroidエミュレーターでアプリ起動する方法を忘れてしまうので、自分用にメモ。

# 手順

## 1. Android仮想マシンの確認

`avdmanager list avd`コマンドで作成済み仮想マシンの確認。
実行例。

```
> avdmanager list avd
Parsing C:\Android\android-sdk\build-tools\28.0.3\package.xmlParsing 
　：
C:\Android\android-sdk\tools\package.xmlAvailable Android Virtual Devices:
    Name: test
    Path: C:\Users\xxx\.android\avd\test.avd
  Target: Google APIs (Google Inc.)
          Based on: Android 7.1.1 (Nougat) Tag/ABI: google_apis/x86
---------
    Name: test2
    Path: C:\Users\kohe5\.android\avd\test2.avd
  Target: Google APIs (Google Inc.)
          Based on: Android 7.1.1 (Nougat) Tag/ABI: google_apis/x86_64

The following Android Virtual Devices could not be loaded:
    Name: Pixel3a
    Path: C:\Users\xxx\.android\avd\Pixel3a.avd
   Error: Google pixel_3a no longer exists as a device
```

`emulator -list-avds`コマンドだと簡易に仮想マシンの名称のみ確認ができる。
実行例。

```
> emulator -list-avds
test
test2
```

## 2. Android仮想マシンの起動

`emulator -avd`で仮想マシン名を指定して起動。
実行例

```
> emulator -avd test2
ANGLE: D3D11: rx::Renderer11::generateConfigs
emulator: ERROR: AdbHostServer.cpp:102: Unable to connect to adb daemon on port: 5037
Failed to open /qemu.conf, err: 2
:
:

emulator: INFO: QtLogger.cpp:68: Warning: QWindowsWindow::setGeometry: Unable to set geometry 71x559+424+221 on QWidgetWindow/'ToolControlsWindow'. Resulting geometry:  107x839+424+221 (frame: 0, 0, 0, 0, custom margin: 0, 0, 0, 0, minimum size: 71x559, maximum size: 71x559). ((null):0, (null))


Your emulator is out of date, please update by launching Android Studio:
 - Start Android Studio
 - Select menu "Tools > Android > SDK Manager"
 - Click "SDK Tools" tab
 - Check "Android Emulator" checkbox
 - Click "OK"
```

## 3. NativeScrit側からアプリをインストールするAndroid仮想マシンの確認

`tns device`コマンドで確認。起動中のデバイスが表示される。
実行例。

```
> tns device

Connected devices & emulators
Searching for devices...
iTunes is not installed. Install it on your system and run this command again.
┌───┬─────────────┬──────────┬───────────────────┬──────────┬───────────┬─────────────────┐
│ # │ Device Name │ Platform │ Device Identifier │ Type     │ Status    │ Connection Type │
│ 1 │ test2       │ Android  │ emulator-5554     │ Emulator │ Connected │ Local           │
└───┴─────────────┴──────────┴───────────────────┴──────────┴───────────┴─────────────────┘
```

## 4. アプリ起動

開発中プロジェクトの直下で`tns run --device`を実行。
deviceのうち#1を指定して実行した例。

```
> tns run --device 1
Searching for devices...
Your application will be deployed only on the device specified by the provided index or identifier.
Preparing project...
Bundling application for entryPath .\main...
File change detected. Starting incremental webpack compilation...

webpack is watching the files…

[BABEL] Note: The code generator has deoptimised the styling of 
:

    + 345 hidden modules
Webpack compilation complete. Watching for file changes.
Webpack build done!
Project successfully prepared (android)
Installing on device emulator-5554...
Successfully installed on device with identifier 'emulator-5554'.
Successfully transferred runtime.js on device emulator-5554.
Restarting application on device emulator-5554...
Successfully synced application org.nativescript.application on device emulator-5554.
JS: HMR: Hot Module Replacement Enabled. Waiting for signal.
JS: '{NSVue (Vue: 2.6.10 | NSVue: 2.5.0)} -> CreateElement(NativeFram
```

# 参考ページ
- Android Studioユーザーガイド avdmanager
https://developer.android.com/studio/command-line/avdmanager?hl=ja

- Android Studioユーザーガイド コマンドラインからのエミュレータの起動
https://developer.android.com/studio/run/emulator-commandline?hl=ja

- NativeScript CLI tns device
https://docs.nativescript.org/tooling/docs-cli/device/device

- NativeScript CLI tns run
https://docs.nativescript.org/tooling/docs-cli/project/testing/run