「Expo」からAndroidエミュレータを使う

前回、「React Native」でスマホ側ネイティブのWebVewを使うことについて書いた。
この時、Androidエミュレータを使って確認したので、その部分について書く。

「Expo」プロジェクトで下記のコマンドを実行するとローカル環境で「Metro Bundler」が19001番ポートで上がる。

yarn start

内部では、「expo start」コマンドがオプション無しで実行される。
(Expoプロジェクトの「package.json」より)

{
  "main": "node_modules/expo/AppEntry.js",
  "scripts": {
    "start": "expo start",
    "android": "expo start --android",
    "ios": "expo start --ios",
    "web": "expo start --web",
    "eject": "expo eject"
  },
  ...


ただ立ち上げただけの状態で「Run on Android device/emulator」を実行すると、「Android Device」が無い旨のエラーになる。

Couldn't start project on Android: Error running adb: No Android device found. Please connect a device and follow the instructions here to enable USB debugging:
https://developer.android.com/studio/run/device.html#developer-device-options. If you are using Genymotion go to Settings -> ADB, select "Use custom Android SDK tools", and point it at your Android SDK directory.

Android実機か、エミュレータが必要。


今回はエミュレータを使うことにする。
Android Studio」をダウンロード。
https://developer.android.com/studio/
「3.5.3 for Linux 64-bit」を選択 (ダウンロードサイズは738 MB)


エミュレータはデフォルトで1つ入っている。

% $ANDROID_HOME/emulator/emulator -list-avds
Nexus_5X_API_29_x86

エミュレータを立ち上げる。

% $ANDROID_HOME/emulator/emulator -avd Nexus_5X_API_29_x86

これで、ExpoプロジェクトからAndroidエミュレータ経由でアプリケーションの動作確認ができる。


同様に、iOSで確認するには、実機か開発環境が必要。
iOS実機は無いので、エミュレータということになるが、Linuxマシンなので断念。

前回も書いたが、ブラウザで済むなら、あえてネイティブ化する必要もない気がする。
ネイティブでないと実現できないこと・・・センサーや細かい制御部分(性能含む)だろうか。

将来的に、モバイルでもセンサーコントロールがブラウザ経由で出来るようになって、性能も出るようになったら(CPUやメモリの進化)、一層ネイティブの優位性は失われ、「ブラウザでいいじゃん」ということになる。

[Web API(センサー)]
https://developer.mozilla.org/ja/docs/Web/API/Detecting_device_orientation#Browser_compatibility

「React Native」も学習コストはかかるし、Airbnbが「React Native」をやめてネイティブに戻った話もある。
ネイティブをやろうとしても、言語や環境に対する学習コストもかかるし、どれに踏み込むか・・・迷う。

OS 開発環境 開発言語
iOS XCode Swift、Objective-C
Xamarin C#
Android Android Studio Kotlin、Java、C、Ruby