banner
moeyy

moeyy

一条有远大理想的咸鱼。
github
mastodon
email

AndroidスマートフォンでHTTPサーバーを構築する

タイトルを見て少し戸惑っていますか?Android スマートフォンで HTTP サーバーを構築する???

Android スマートフォンで HTTP サーバーを構築する

あなたは私をからかっているのですか?

その通り、私たちは Android スマートフォンで HTTP サーバーを構築するのです。HTTP サーバーといえば、一般的には Apache や nginx を思い浮かべます。
Android でも Apache や nginx を実行できるのでしょうか???
Android スマートフォンではこれらのサーバーを実行することはできませんが、今回は Android 上で Golang で書かれたシンプルな HTTP サーバーを実行します。Golang はクロスプラットフォームでコンパイルできるため、システムを Linux に選択し、CPU アーキテクチャを arm に設定して、スマートフォン上で実行してみました。すると、Android スマートフォン上で本当に HTTP サーバーが実行されました。

Android スマートフォンで HTTP サーバーを構築する

驚きです。

本題に戻りますが、Golang を開発するためには、まず Golang の開発環境を構成する必要があります。Golang の設定については、こちらを参照してください。
私は Ubuntu で開発しており、新しい service.go ファイルを作成しました。

  1 package main
  2 
  3 import (
  4         "net/http"
  5        )
  6 
  7 func main() {
  9     http.HandleFunc("/",myResponse)
 10     http.ListenAndServe("127.0.0.1:8888",nil)
 11 }
 12 
 13 func myResponse(w http.ResponseWriter,r* http.Request)  {
 14     w.Write([]byte("<html><center> <font size="40">こんにちは、私はGoサービスです</font></center></html>"))
 15 }

Go に不慣れな方は注意してください。無闇に改行しないでください 無闇に改行しないでください 無闇に改行しないでください。Go は Python のように、**「;」** で終了しないからです。
簡単に説明します。
http.HandleFunc("/",myResponse)の最初のパラメータは HTTP サービスの URL を登録するもので、ここでは"/"を入力します。アクセスする際は直接localhost:8888で大丈夫です。もし"/test"を入力した場合、アクセス時の URL はlocalhost/test:8888になります。
http.ListenAndServe("127.0.0.1:8888",nil)の最初のパラメータはリッスンする IP とポートで、2 番目はnilで大丈夫です。
次に、コンパイルして実行してみましょう。ローカルで実行するプログラムはデフォルトのコンパイルパラメータで大丈夫です。go build service.goを実行します。
その後、./serviceを実行します。
ブラウザに URL を入力すると、成功してアクセスできました。

Android スマートフォンで HTTP サーバーを構築する

chrome

次のステップとして、このプログラムを Android に移植します。Android スマートフォンは root 権限が必要です。スマートフォンが root 化されていない場合、または root 化したくない方はエミュレーターを使用できます。CPU の命令セットパラメータを少し変更すれば大丈夫です。まずスマートフォンで実行してみます。私のスマートフォンは Honor 6 で、CPU は HiSilicon 920 です。HiSilicon 920 の命令セットは arm32 であることを確認しました。では、コンパイルします。
コンパイルする前に、先ほどコンパイルしたプログラムの名前を変更します。
GOOS="linux" GOARCH="arm" go build service.goを実行します。
実行可能ファイルが得られます。fileコマンドで確認します。file service

service: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, not stripped

このファイルが 32 ビットの arm プログラムであることがわかります。OK、Android スマートフォンにコピーして試してみます。
必要なソフトウェアは以下の通りです。

Android スマートフォンで HTTP サーバーを構築する

Screenshot_2018-04-08-19-17-19.png

**「juiceSSH」は Linux のシェルコマンドを模倣するために使用します。「RE ファイルマネージャー」** はファイルの権限を変更するために使用します。Android では chmod コマンドは機能しません。
まずルートディレクトリにコピーします。
その後、ファイルの権限を変更します。

Android スマートフォンで HTTP サーバーを構築する

Screenshot_2018-04-08-19-18-11.png

Android スマートフォンで HTTP サーバーを構築する

Screenshot_2018-04-08-19-18-20.png

その後、juiceSSH で実行し、ブラウザに URL を入力してみます。

Android スマートフォンで HTTP サーバーを構築する

Screenshot_2018-04-08-19-19-43.png

問題ありません。
次に、エミュレーター上でコンパイルします。私が使用しているのは Genymotion で、Google Nexus 5 の OS を実行しています。調べたところ、Nexus 5 は Qualcomm Snapdragon 800 CPU を使用していることがわかりました。ここで問題が発生しました。Snapdragon 800 は arm32 の命令セットで、理論的にはそのプログラムを直接コピーすれば実行できるはずですが、/system/bin/sh: ./service_arm32: not executable: 32-bit ELF fileというエラーが表示されました。
考えた末、CPU が PC のものであるため、X64にコンパイルしてみましたが、うまくいきませんでした。次にX86に変更してみました。ついに成功しました。実は、命令は PC の CPU を使用し、ビット数はエミュレーターのものである必要がありました。
GOOS="linux" GOARCH="386" go build service.goを実行します。
エミュレーターにコピーし、スマートフォンと同様にルートディレクトリにコピーして権限を追加します。その後、adb shell で実行し、エミュレーターのブラウザでアクセスできることを確認しました。

Android スマートフォンで HTTP サーバーを構築する

genymotion

さて、私たちは Android 上で HTTP サーバーを実行することができました。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。