个人在ubuntu上用交叉编译工具链musl-cross-compilers参考droidphp的教程构建了适用于linux arm架构的二进制php解释器.其中droidphp的教程用的是arm-none-linux-gnueabi那一套工具链,我发现不好使,后来我又看到了pocketmine,一个用php7构建的minecraft android版服务器端,它用的是musl-cross-compilers,所以我也改用这套工具链.我主要做了一些修改,比如修改libc库的shell路径,以及dns相关的resolv.conf和hosts位置,主要是为了让php能在android上跑.
现在有了能够运行在android上的php解释器,接下来就是看看能用什么方法构建app.因为php解释器从5.4开始内置了一个cli http server,这是一个c实现的支持php编程的单进程web服务器,很轻量,官方定位是开发测试.而且它还支持一个特性,就是可以启动时给它指定一个php路由脚本:
php -s 127.0.0.2:8080 -t /www auth.php
比如我打包的phpdroid里的auth.php是这样的:
/dev/null 2>&1 记录php的pidecho $! > pid#监听,发现文件auth.php被删除,则关闭php进程$1/php/bin/watcher $1/php/bin/auth.php >/dev/null 2>&1 记录watcher的pidecho $! > pid_watcherreturn 0stop.sh#!/system/bin/shua=$1/php/bin/uaif [ -e $ua ]; then rm $uafiport=$1/php/bin/portif [ -e $port ]; then rm $portfipid=$1/php/bin/pidif [ -e $pid ]; then kill -9 `cat $pid` rm $pidfipid=$1/php/bin/pid_watcherif [ -e $pid ]; then kill -9 `cat $pid` rm $pidfireturn 0ua.php 好了,看到这里,大家基本已经明白我所说的用php开发android应用的思路.
大家感兴趣可以下载我打包好的apk来体验一下:
phpdroid_20160703.apk(5.8m)
phpdroid_20160703.7z(4.7m)
apk里包含php最新的7.0.8和高性能网络编程扩展swoole,
另外还有busybox和生成二维码的qrencode.
7z包是项目源代码,主要就是mainactivity.java和assets数据.
提示下,我打包的apk在start.sh里把网站根目录调整到了sd卡的phpdroid目录下,主要上方便大家体验时usb连接手机把自己写的php文件放到里面运行测试.
