基於WebView,用本地PHP開發Android應用是否可行?
大家以前可能都聽說過PHP for
個人在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路由腳本:
Android這麼一個東西,可以下結論的是,這個項目其實已經不再活躍失敗了,因為其依賴的SL4A(Scripting Layer for
Android)已經停止更新和維護了,而且它依賴SL4A的運行模式也跟我下面提到的PHPDroid的本地Browser/Server模式截然不同.
php -S 127.0.0.2:8080 -t /www auth.php
比如我打包的PHPDroid里的auth.php是這樣的:
有了上面這些東西,我們該怎麼進行圖形化交互呢?我想大家都想到了,那就是Android內置的WebView.個人認為,瀏覽器是有史以來最成功的跨平
& 我們還知道,PHP還內置了SQLite引擎,一個文件就是一個資料庫,管理起來非常方便,可視化管理工具可以用免費開源跨平台的SQLiteStudio.現在有了HTTP伺服器和SQLite資料庫,我編譯時還啟用了一些常用的擴展.
台GUI應用.Android從4.4開始,WebView底層由Chromium驅動,性能也是相當不錯的.如果你要調用一些Java編寫的本地功
能,WebView一直都提供有一個addJavascriptInterface的特性,可以把Java對象注入到WebView中供JS調用.也就是說,你用WebView也是可以進行一些本地API調用的,當然你得先用Java寫好那些功能.好了,現在PHPDroid的整個運行模式就比較清晰了,應用啟動時,執行start.sh隨機生成UserAgent並記錄下來(ua.php),找到
可用埠並記錄下來(port.php),然後啟動PHP內置HTTP伺服器並記錄PID(用於關閉),Java里啟動WebView前讀取隨機生成
UserAgent並setUserAgentString設置,PHP內置伺服器的路由auth.php會對UserAgent進行比對,拒絕本機上其他應用(比如瀏覽器)發出的請求.好了,看到這裡,大家基本已經明白我所說的用PHP開發Android應用的思路.
大家感興趣可以下載我打包好的APK來體驗一下:phpdroid_20160703.apk(5.8M)phpdroid_20160703.7z(4.7M)
7z包是項目源代碼,主要就是MainActivity.java和assets數據.apk里包含PHP最新的7.0.8和高性能網路編程擴展Swoole,另外還有BusyBox和生成二維碼的qrencode.提示下,我打包的APK在start.sh里把網站根目錄調整到了SD卡的phpdroid目錄下,主要上方便大家體驗時USB連接手機把自己寫的PHP文件放到裡面運行測試.
比靈活性不如h5
比靈活性加流暢性不如react native
比流暢性不如native唯一的好處是可以用php。。其實就是手機上裝一個php伺服器,然後通過webview訪問本地伺服器,跟咱們平時開發後台的時候用localhost訪問一個道理,對吧?
看上去是可行的,但沒看出有什麼優勢,如果直接訪問網路伺服器的話還能升級,你這個升級起來特費勁,安全性就不說了,放sdcard不靠譜。。。與其這樣,不如直接用h5.、,還能在線更新,
現在的確已經有一票工具用Web技術來造APP了,所以題主用PHP是想解決哪方面的問題呢?
思路上來說是沒有問題的,但是在很多其他的地方肯定是不如已經成熟的HTML5應用開發工具考慮得周到。其實Web應用痛點不算太多,Javascript基本上能夠解決所有的問題了。為什麼要說服程序員從一個火坑跳到另一個火坑?
拿吸管可以喝湯並不意味著我們真的去這麼做,在需要什麼技術的地方用什麼技術吧,玩票除外
webview 中主要是 html+css+js 的地盤,要與資料庫或複雜業務交互不是可以 js 調用 java么,感覺沒php什麼事。
純屬蛋疼啊
向來是為了解決一個問題去選擇工具的,而不是為了一個工具去提出問題,就像石頭可以做個武器,但是現在戰爭中不會用石頭去作戰的。
可行,但明顯沒任何優勢,小眾玩物,上不了檯面。
問一下,可以用你的這個項目完成像shadowsocks這樣的軟體么.....還有許可權控制咋整
Phonegap 了解一下
借用2015網路熱詞-----然並卵
題主這是想拯救萬千PHP程序員於業務巨坑中啊
不是非常理解使用php的必要性,把服務端也放在本地嗎?多個php應用運行時是共用一個php還是多個?如果只做客戶端我覺得直接用Angular.js這類解決方案更合適。
不是非常理解使用php的必要性,把服務端也放在本地嗎?多個php應用運行時是共用一個php還是多個?如果只做客戶端我覺得直接用Angular.js這類解決方案更合適。
MySQL還不能運行在安卓里吧
推薦閱讀:
※Android 5.0 相對於之前的 Android 系統有多大的改變?主要是性能方面。
※Swift是Android的未來么?