AndroidスマートフォンやAndroidタブレットでプログラミングを楽しむ! #1

  • (by K, 2020.09.02)

(1) 概要

  • 最近のスマートフォンやタブレットは、安価なものでもARM64が使われています。このCPUの処理能力は、かなり高いのではないかと思われます。それなら、それらを対象にプログラムを作って遊べたら非常に楽しいのではないかと私は思いました。
  • そう思って少し調べていたら、Termuxという素晴らしい無料アプリがあり、これを使えばAndroid上でLinux的なプログラミングができるとわかりました。
  • さらにXServer XSDLという無料アプリも併用すると、Termux上でSDL2.0を使うことができて、グラフィカルなアプリも書けることがわかりました。
  • ということで、ここではそれを紹介したいと思います。

(2)

  • まず最初に、安価なAndroidタブレットがどれほど安いのかを確認します。
  • 安いARM64マシンといえば、やはり筆頭はラズベリーパイだと思います。Amazonで価格を眺めてみると、だいたい5,000円くらいします。これに電源とSDカードと十分な冷却手段とディスプレイを準備する必要があります。これらを全部含めたら、ディスプレイを除いても8千円くらいになってしまいそうで、思ったより安くはないかもという気はします(それでもPCよりはずっと安いのではありますが)。
  • 一方、安価なAndroidタブレットであれば、たとえば「Dragon Touch タブレット」が5,999円で売っています。タブレットなので、ディスプレイもついてきます(まあ7インチ程度ではありますが)。これでもスペックを見る限りではRAMは2GBもあります。
  • ということで、安価にプログラミングを始めるのなら、今は格安Androidタブレットが最強なのではないかと私は思います。
  • 私はソフトウェアキーボードでプログラムを入力することには耐えられそうになかったので、Bluetoothのキーボードを買いました。これは1,962円でした。これで非常に快適に操作できていると感じるので、キーボードはおすすめです。

(3)

  • 私は以下の順番でインストールしました。
  • [1]GooglePlayから「Termux」をインストール。
  • [2]Termuxのインストールが完了したら、早速起動して、
    $ pkg update
    $ pkg upgrade
    $ pkg install clang
  • で、clangをインストールしました。途中で「容量こんぐらいだけどインストールしていいか?」みたいに聞かれたときは、すべて「y」で答えました。
  • そして
    $ nano hello.c
  • でnanoを起動して、
    #include <stdio.h>
    int main()
    {
        printf("hello, world\n");
        return 0;
    }
  • を入力して、^Xで保存&終了して、
    $ clang hello.c -o hello
    $ ./hello
    hello, world
  • のように実行してみて、うまく動いているなーと満足しました。
  • キャラクターベースのプログラムでよければ、このままでも、どれだけでも作れそうです!すごい!!
  • なお、
    $ pkg list-all
  • とするとインストール可能なパッケージがたくさん出てきます。

  • [Android機の性能についての補足]
    • 厳密な比較はないみたいなのですが、以下の大雑把な比較だけでも参考になります。
    • clang コンパイル時間比較 https://dench.flatlib.jp/linux/compilebench
    • これを見ていると、Google Pixel 3 は Core-i7 機に匹敵しているように見えます。値段は全然違うのに!

(4)

  • 私はグラフィカルなプログラムを書くのも好きなので、さらに先に進んでSDL2.0を利用可能にしました。
  • [3]GooglePlayから「XServer XSDL」をインストール。
  • [4]Termux側で以下のものをインストール。
    $ pkg install x11-repo
    $ pkg install sdl2
    $ pkg install xfwm4
  • [5]そしてAndroidの設定画面を出して、TermuxとXServer XSDLの二つのアプリに関して、バックグラウンドに入っても停止させないように設定します。
    • うちのAndroidタブレットはそれでうまくいきました。
    • ちなみに、Androidのバージョンによって設定が違うみたいで、うちのスマートフォンではアプリごとの設定はできず、すべてのアプリに対してバッググラウンドになっても停止しないように設定する必要がありました。
    • この設定をやらないと、SDL2.0を使ったプログラムが1分もしないうちに固まってしまうようになります(SDLの実行画面を表にしているときは、Termux側がバッググラウンドになってしまうため)。
  • そして後の説明のために以下を実行して、ダウンロードフォルダに簡単にアクセスできるようにしておきます。
    $ termux-setup-storage
  • [6]ここからは起動です。まずTermuxとXServer XSDLの両方を起動します。起動順序はたぶん重要じゃないです。XServer XSDLのほうは起動に少し時間がかかります。
  • [7]XServer XSDLの画面を見ると、export設定に関する表示が2行出ているはずなので、それをメモして、Termux側に移って、
    $ export DISPLAY=192.168.0.24:0
    $ export PULSE_SERVER=tcp:192.168.0.24:4713
  • とやったあとに(これらの内容は先のメモに従ってください)、
    $ xfwm4 &
  • とやります。これでSDL2.0を使った表示の準備ができました。
  • 試しに何か表示させてみましょう。私が作った適当なプログラムでよければ、 http://k.osask.jp/files/bls20200902a.zip にまとめておきました。これをダウンロードしてunzipで解凍してください。
    $ unzip ~/storage/downloads/bls20200902a.zip
  • これで以下に紹介する4つ簡単なプログラムを実行することができます。

(5-1)

  • [8] "グラデーション"
    $ cd ~/bls20200902a
    $ clang grd.c -o grd -lSDL2
    $ ./grd
  • ここまで入力したら、XServer XSDL側の画面を見てください。以下のような表示が出ているはずです(ウィンドウタイトルはgradationになっていると思います)。
    • http://k.osask.jp/files/pic20200828a.jpg
  • マウスカーソルを動かすのにはコツがいりますが、試行錯誤すればわかるはずです。ウィンドウのクローズボタンを押せば、grdは終了します。Termux側に戻ればプロンプトが出ているはずです。
  • ちなみに、このプログラムは、最初の14行の「たくさんあってうっとうしい#include」を全部無視すれば、たったこれだけの単純なものです。
    int main()
    {
    	bls_init();
    	bls_Window *w = bls_openWin(256, 256, "gradation", 1);
    	int x, y;
    	for (y = 0; y < 256; y++) {
    		for (x = 0; x < 256; x++)
    			bls_setPix(w, x, y, bls_xrgb(y, x, 0));
    	}
    	bls_wait(-1);
    	return 0;
    }

(5-2)

  • [9] "マンデルブロー集合"
    $ cd ~/bls20200902a
    $ clang mandel.c -o mandel -lSDL2
    $ ./mandel
  • ここまで入力したら、XServer XSDL側の画面を見てください。以下のような表示が出ているはずです(ウィンドウタイトルはmandelになっていると思います)。
    • http://k.osask.jp/files/pic20200830a.jpg
  • ちなみにこのプログラムもライブラリ以外はmain()だけで構成されていて、その行数は40行です。

(5-3)

  • [10] "キューブ回転"
    $ cd ~/bls20200902a
    $ clang kcube.c -o kcube -lSDL2 -lm
    $ ./kcube
  • ここまで入力したら、XServer XSDL側の画面を見てください。以下のような表示が出ているはずです。
    • http://k.osask.jp/files/pic20200831a.jpg

(5-4)

  • [11] "インベーダーゲーム"
    $ cd ~/bls20200902a
    $ clang invader.c -o invader -lSDL2
    $ ./invader
  • ここまで入力したら、XServer XSDL側の画面を見てください。ゲームができるはずです。カーソルキーの左右で動かせます。スペースキーでミサイルを撃てます。
    • http://k.osask.jp/files/pic20200901a.jpg

(6) もっとすごい人たち

  • Android: UserLAnd + Termux を Note PC 代わりに使う https://wlog.flatlib.jp/item/1885
    • Androidの中にウィンドウを複数開いて、それで作業できる??

こめんと欄


コメントお名前NameLink

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-09-03 (木) 19:56:30 (17d)