PHPDroidPHP 開發(fā) Android 應用
個人在Ubuntu上使用交叉編譯工具鏈 arm-linux-musleabi 或 arm-none-linux-gnueabi 按照 DroidPHP 的教程構建了適用于Android(ARM架構)和樹莓派Raspbian(ARM架構基于Debian的Linux發(fā)行版)的PHP解釋器(cli,cli-server).
從圖中可以看到,PHP進程的內(nèi)存(RSS)內(nèi)存占用才5MB,WebView的內(nèi)存占用將近80MB.
內(nèi)容包括:
main: 這個目錄里面是項目源代碼,主要就是MainActivity.java和assets數(shù)據(jù).
phpdroid.apk: 應用示例,大小不到6MB,包含PHP,Swoole,BusyBox,QRencode.
這里需要說明的是,BusyBox并不是PHP必備的東西,
打包它只是為了方便PHP能夠調(diào)用里面常用的GNU/Linux命令,
去掉BusyBox后APK包還能縮小600KB.
需要強調(diào)的是,包里的PHP是路徑無關的,運行也不需要root權限,
只要維持assets/php/的目錄結構,放到你的應用里也能正常運行.
PHP的版本是7.1.0.
網(wǎng)站根目錄位于assets/php/www.
PHPer在PC上開發(fā)時,只需執(zhí)行:
php -S 127.0.0.2:8181 -t /path/to/assets/php/www
然后打開瀏覽器的手機模式訪問 127.0.0.2:8181 就可以了.
PHPDroid基本工作原理:
Java啟動PHP內(nèi)置的HTTP服務器,然后開一個WebView訪問這個PHP驅動的HTTP服務.
其中,WebView用于實現(xiàn)人機交互,可以用傳統(tǒng)的HTML/CSS/jQuery技術進行圖形界面編程.
PHP則負責跟本地文件系統(tǒng),SQLite數(shù)據(jù)庫,網(wǎng)絡進行交互.
需要強調(diào)的是,PHPDroid追求的不是像Java App那樣能夠訪問Android系統(tǒng)提供的API. PHPDroid的優(yōu)勢在于用傳統(tǒng)的Web開發(fā)技術HTML/CSS/JS/PHP/SQL就能開發(fā)基于WebView的本地WebApp. PHPDroid內(nèi)置的本地PHP不能訪問Android提供給Java的API,但可以操作本地文件系統(tǒng)(應用目錄)和SQLite以及進行網(wǎng)絡交互. 比如獲取一個新聞列表,WebView通過AJAX訪問本地PHP,PHP再通過cURL等訪問遠程服務器. 遠程服務器返回JSON,里面包含新聞的標題,摘要,縮略圖網(wǎng)址,本地PHP轉成數(shù)組后循環(huán)輸出到WebView. 可見這個本地PHP既是WebView的服務器端,又是遠程服務器的客戶端,是WebView和遠程服務器數(shù)據(jù)交互的中轉站. 把WebView和本地PHP看做一個整體,那它就是一個不能調(diào)用Android API的本地WebApp. 畢竟Android是Linux內(nèi)核,一切皆文件的思想還是在那里的, 只要有權限,PHP讀取一些系統(tǒng)數(shù)據(jù)(比如/proc/cpuinfo)并沒有問題.
比如基于Android上的PHP(比如我打包的PHPDroid),寥寥幾行PHP代碼,
就能實現(xiàn)一個支持無線局域網(wǎng)用瀏覽器訪問的Android手機的Shell,用于執(zhí)行命令和PHP代碼.
