🌀

android端末からPCのローカルサーバにアクセスする方法

2020/09/28に公開

PC内で立てたローカルサーバにアクセスする必要があったので調べた

同じwifiに繋がっている時

同じwifiにいる場合pcのipアドレス+ポート番号でローカルサーバにアクセスできる
プライベートipを直接指定する形になるので、プログラムに組み込むのは現実的ではなさそう

手順

  • PCに割り当てられているipアドレスを取得
  • ↑で取得したipアドレスに端末側からアクセスする

同じwifiに繋ぐのがめんどくさい or ipアドレスではなくlocalhostで接続したい時

手順

  • pc上でローカルサーバを起動
  • Android端末でChromeを起動しておく(ChromeがForegroundにある状態)
  • usbデバッグを有効化したAndroid端末をPCに接続
  • chromeでchrome://inspect/#devicesにアクセス(デバックの許可を求められたら許可する)
  • Port forwarding... をクリックする
    inspect.jpg
  • 右欄にローカルサーバのipアドレス+ポート番号を入力、左欄に端末側でサーバアクセスする時のポート番号を入力

port_settings.jpg

  • Enable port forwardingをクリックして有効化
  • Doneで終了し、端末のブラウザでlocalhost:[↑で設定したポート番号]にアクセスすれば、pc内のローカルサーバにアクセスできる

毎回chromeのinspectを起動しなければならないが、hostがlocalhostに固定できるので、プログラムに組み込んでも問題なさそう。

エミュレータの場合

build.gradleでPCのアドレスを取得し、環境変数に設定する

// build.gradle(app)
android {
  ...
  buildTypes {
    // PCのIPアドレスを取得
    def host = InetAddress.getLocalHost().getCanonicalHostName()
    debug {
      // ipを環境変数として扱える様に
      buildConfigField "String", "LOCAL_SERVER_IP", "\"${host}\""
    }
  }
}

※追記: 上の様にしなくても、127.0.0.1のエイリアスが10.0.2.2の様なので、ホストにこのエイリアスを使用すれば良さそう
https://developer.android.com/studio/run/emulator-networking

ngrokを使う

公式サイトからアカウント登録して自分のPCにインストールして、アカウントの認証して実行すれば任意のポートを公開することができる。
詳しいやり方は公式サイトに書いてあるのを見ればなんとなく理解できるはず。
設定すればbasic認証も無料でかけれるので便利。

Discussion