国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用PHP開發Android應用的可行性探究(PHPDroid)

szysky / 1294人閱讀

摘要:基于上的比如我打包的寥寥幾行代碼就能實現一個支持無線局域網用瀏覽器訪問的手機的用于執行命令和代碼大家以前可能都聽說過這么一個東西可以下結論的是這個項目其實已經不再活躍失敗了因為其依賴的已經停止更新和維護了而且它依賴的運行模式也跟我下面提到的


基于Android上的PHP(比如我打包的PHPDroid),寥寥幾行PHP代碼,就能實現一個支持無線局域網用瀏覽器訪問的Android手機的Shell,用于執行命令和PHP代碼.

大家以前可能都聽說過PFA(PHP for Android)這么一個東西,可以下結論的是,這個項目其實已經不再活躍失敗了,因為其依賴的SL4A(Scripting Layer for Android)已經停止更新和維護了,而且它依賴SL4A的運行模式也跟我下面提到的PHPDroid的本地Browser/Server模式截然不同.

個人在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是這樣的:


我們還知道,PHP還內置了SQLite引擎,一個文件就是一個數據庫,管理起來非常方便,可視化管理工具可以用免費開源跨平臺的SQLiteStudio.現在有了HTTP服務器和SQLite數據庫,我編譯時還啟用了一些常用的擴展,如下:

bcmath calendar Core ctype curl date dom exif filter ftp gd hash json libxml mbstring mcrypt openssl pcre PDO pdo_sqlite Reflection session SimpleXML sockets SPL sqlite3 standard swoole xml xmlreader xmlwriter zip zlib

有了上面這些東西,我們該怎么進行圖形化交互呢?我想大家都想到了,那就是Android內置的WebView.個人認為,瀏覽器是有史以來最成功的跨平臺GUI應用.Android從4.4開始,WebView底層由Chromium驅動,性能也是相當不錯的.如果你要調用一些Java編寫的本地功能,WebView一直都提供有一個addJavascriptInterface的特性,可以把Java對象注入到WebView中供JS調用,比如:

Java代碼:
webview.addJavascriptInterface(new Object() {
    @JavascriptInterface
    public String getprop(String prop) {
        return java.lang.System.getProperties().getProperty(prop);;
    }
}, "android");

WebView里的HTML代碼:
os.name

也就是說,你用WebView也是可以進行一些本地API調用的,當然你得先用Java寫好那些功能.

好了,現在PHPDroid的整個運行模式就比較清晰了,應用啟動時,執行start.sh隨機生成UserAgent并記錄下來(ua.php),找到可用端口并記錄下來(port.php),然后啟動PHP內置HTTP服務器并記錄PID(用于關閉),Java里啟動WebView前讀取隨機生成UserAgent并setUserAgentString設置,PHP內置服務器的路由auth.php會對UserAgent進行比對,拒絕本機上其他應用(比如瀏覽器)發出的請求.
各個腳本如下:

start.sh
#!/system/bin/sh
cd $1/php/bin
chmod 700 busybox
if [ ! -f php ]; then
    ./busybox xz -d file.tar.xz
    ./busybox tar xf file.tar && rm file.tar
    chmod 700 lib/ld php watcher qrencode
    ./busybox sed -i "s@/data/data/net.php.phpdroid@$1@g" php.ini
    ./busybox sed -i "s@/storage/self/primary@$2@g" php.ini
    cp resolv.conf $1/php/www
    cp hosts $1/php/www
fi
#隨機生成UserAgent
./php -c php.ini ua.php
#獲取可用端口
./php -c php.ini port.php
#開發調試時把網站根目錄復制到SD卡,方便修改
# -t $1/php/www  實際應用的網站根目錄
# -t $2/phpdroid 開發調試的網站根目錄
if [ ! -d $2/phpdroid ]; then cp -R $1/php/www $2/phpdroid; fi
#啟動PHP服務
$1/php/bin/php 
-c php.ini 
-S 127.0.0.2:`cat $1/php/bin/port` 
-t $2/phpdroid 
$1/php/bin/auth.php 
>/dev/null 2>&1 &
#記錄PHP的PID
echo $! > pid
#監聽,發現文件auth.php被刪除,則關閉PHP進程
$1/php/bin/watcher $1/php/bin/auth.php >/dev/null 2>&1 &
#記錄watcher的PID
echo $! > pid_watcher
return 0

stop.sh
#!/system/bin/sh
ua=$1/php/bin/ua
if [ -e $ua ]; then
    rm $ua
fi
port=$1/php/bin/port
if [ -e $port ]; then
    rm $port
fi
pid=$1/php/bin/pid
if [ -e $pid ]; then
    kill -9 `cat $pid`
    rm $pid
fi
pid=$1/php/bin/pid_watcher
if [ -e $pid ]; then
    kill -9 `cat $pid`
    rm $pid
fi
return 0

ua.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文件放到里面運行測試.

附:開頭題圖(Shell)的PHP代碼:







PHPDroid Web Shell







文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21774.html

相關文章

  • 探究 React Native 中 Props 驅動 SVG 動畫和 Value 驅動動畫

    摘要:再來看前端,前端的動畫實現,經過多年的發展,已分為動畫和動畫。此外還探究了驅動動畫在實現方法上的不同之處。驅動的動畫接下來看驅動的動畫。改造后的函數如下關鍵修改,強制刷新。對于,函數是可行的,然而對無效。 引言 一直以來,動畫都是移動開發中極為特殊的一塊。一方面,動畫在交互體驗上有著不可替代的優越處,然而另一方面,動畫的開發又極為的耗時,需要消耗工程師大量的時間用于開發和調試。再來看前...

    Codeing_ls 評論0 收藏0
  • Web離線技術(一)—— 技術選型

    摘要:上面提到在安卓完全不需要像這樣大費周章的繞彎路,所以安卓可能就不需要這個自定義的,這樣又會導致面臨著與安卓差異化嚴重問題。前言 最早接觸離線包的概念要追溯到16年初,項目迎來大改版,其中重點項目之一就是離線包方案的制定與實施。離線包顧名思義就是將H5/CSS/JS和資源文件打包提前下發到App中,這樣App在加載網頁的時候實際上加載的是本地的文件,減少網絡請求來提高網頁的渲染速度,并實現動態...

    null1145 評論0 收藏0
  • 后臺 - 收藏集 - 掘金

    摘要:探究系統登錄驗證碼的實現后端掘金驗證碼生成類手把手教程后端博客系統第一章掘金轉眼間時間就從月份到現在的十一月份了。提供了與標準不同的工作方式我的后端書架后端掘金我的后端書架月前本書架主要針對后端開發與架構。 Spring Boot干貨系列總綱 | 掘金技術征文 - 掘金原本地址:Spring Boot干貨系列總綱博客地址:http://tengj.top/ 前言 博主16年認識Spin...

    CrazyCodes 評論0 收藏0

發表評論

0條評論

szysky

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<