PHPDroid 更新,PHP 开发 Android 应用 - 开源中国社区
PHPDroid 更新,PHP 开发 Android 应用
eechen 2016年07月04日

PHPDroid 更新,PHP 开发 Android 应用

eechen eechen 发布于2016年07月04日 收藏 66 评论 52

有免费的MySQL,为什么还要买? >>>  

PHPDroid 更新了,集成最新PHP7+Swoole+BusyBox+QRencode 开发 Android 应用。

下载地址:
phpdroid_20160703.apk(5.8M)
phpdroid_20160703.7z(4.7M)
apk里包含PHP-7.0.8和高性能网络编程扩展Swoole,
另外还有BusyBox和生成二维码的qrencode.
7z包是项目源代码,主要就是MainActivity.java和assets数据.

PHPDroid: 基于WebView和PHP内置HTTP服务器开发Android应用
Android从4.4开始,WebView由Chromium驱动,性能今非昔比.
一直以来,浏览器是最成功的跨平台桌面应用.
基于PHP(CLI HTTP Server)+Browser(WebView),
使用PHPDroid,能够轻松像开发WAP手机站一样快速开发APP应用.
有了 android.webkit.JavascriptInterface ,
也可以很容易地把一些Java写好的功能注入到WebView给JS调用.

其中PHP包含了以下常用扩展:
bcmath: Binary Calculator Math,任意精度数学计算函数(bc*).
calendar: 历法扩展集包括了一系列用于在不同历法间进行转换的函数(cal_*)
Core: PHP核心
ctype: 字符类型检测函数(ctype_*)
curl: cURL(client URL)库函数(curl_*,支持http/https/ftp/ftps等协议).
date: 日期和时间函数,是PHP核心的一部分
dom: Document Object Model操作类和函数(DOM*)
exif: 读取exif格式数码照片的信息
filter: 验证和过滤数据
ftp: 用于FTP交互
gd: 用于处理图像
hash: 哈希信息摘要框架(hash_*)
json: JSON编解码函数(json_*)
libxml: dom,xsl,simplexml,xml,xmlreader,xmlwriter,xmlrpc,wddx,soap都依赖libxml扩展(libxml_*).
mbstring: 多字节字符串函数(mb_*)
mcrypt: mcrypt库函数(mcrypt_*)
openssl: openssl库函数(openssl_*)
pcre: 正则表达式库函数(preg_*)
pdo: PHP数据对象(PDO)
pdo_sqlite: SQLite的PDO接口
reflection: 反射,PHP核心部分
session: session_*,会话处理函数
simplexml: XML简易操作函数
sockets: socket函数
spl: PHP解决典型问题库,PHP核心部分
sqlite3: SQLite3数据库引擎
standard: 标准库,PHP核心部分
swoole: 峰哥开发的高性能网络编程扩展
xml: XML解析函数(xml_*)
xmlreader
xmlwriter
zip: 读写zip压缩文件函数(zip_*)
zlib: 读写gz(gzip)压缩文件函数(gz*)

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:PHPDroid 更新,PHP 开发 Android 应用
分享
评论(52)
最新评论
0
请问 商用的时候 难道也要 adb shell 进去再
cd /data/data/net.php.phpdroid/php/bin

./php -S 127.0.0.2:8181 -t /data/data/net.php.phpdroid/php/www/

如何打开app 就自动运行这个 php呢
0
支持
0

引用来自“rieon”的评论

都没用面向对象,require来include去,水平可见一斑

引用来自“eechen”的评论

你说对了,我就是反框架反完全面向对象的PHPer.
不爽? You Can You Up, No Can No BB.
你都自称PHPer,这大概是PHP被黑的最惨的一次(´•༝•`)
0

引用来自“rieon”的评论

都没用面向对象,require来include去,水平可见一斑
你说对了,我就是反框架反完全面向对象的PHPer.
不爽? You Can You Up, No Can No BB.
0
都没用面向对象,require来include去,水平可见一斑
0

引用来自“eechen”的评论

cross_compile_php.txt
https://pan.baidu.com/s/1dEEnBtJ
@Vancent 这是我使用musl-cross-compilers交叉编译Android版PHP7的详细笔记,你可以下载下来看一下.静态编译PHP的关键点就在configure里加参数--enable-static和修改Makefile:
sed -i "s{-export-dynamic{-all-static{" Makefile
非常感谢,我先试一下,有问题再向你请教..
0
cross_compile_php.txt
https://pan.baidu.com/s/1dEEnBtJ
@Vancent 这是我使用musl-cross-compilers交叉编译Android版PHP7的详细笔记,你可以下载下来看一下.静态编译PHP的关键点就在configure里加参数--enable-static和修改Makefile:
sed -i "s{-export-dynamic{-all-static{" Makefile
0

引用来自“Vancent”的评论

大神可以请教一下php静态链接执行文件的编译过程吗?自己编的都是动态链接库...

引用来自“eechen”的评论

我参考的是这一篇:
https://github.com/DroidPHP/DroidPHP/blob/master/docs/Compiling.md
我也是安装shushant的这个文件配置的,但是一直编出来的都是dynamically linked executable...改变中间一些关键库的版本应该没有影响的吧?我改了openssl版本和php
0

引用来自“Vancent”的评论

大神可以请教一下php静态链接执行文件的编译过程吗?自己编的都是动态链接库...
我参考的是这一篇:
https://github.com/DroidPHP/DroidPHP/blob/master/docs/Compiling.md
0
大神可以请教一下php静态链接执行文件的编译过程吗?自己编的都是动态链接库...
0
@小白变老白 其实DNS域名解析这个问题不仅仅跟curl有关,还跟PHP内一切涉及到DNS解析的操作有关,比如file_get_contents和gethostname等等,你都必须保证你的这些操作直接或间接在网站根目录下的PHP文件里执行,因为我把resolve.conf放在了网站根目录下面,PHP默认就是加载当前执行的PHP脚本的目录下的resolv.conf来进行DNS解析.
0

引用来自“eechen”的评论

@小白变老白 curl需要读取当前目录的resolv.conf进行DNS.
而resolv.conf我放在了网站根目录下,所以你的脚本里运行curl的部分也应该放在网站根目录下,可以是直接的也可以是间接的,比如:
/resolv.conf
nameserver 180.76.76.76

/index.php
require __DIR__.'/include/common.php';
foo();

/include/common.php
require __DIR__.'/functions.php';

/include/functions.php
function foo() {
  require __DIR__.'/../view/index.php';
}

/view/index.php
header('Content-Type: text/plain; charset=GBK');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
exit();

访问 /index.php 正常
访问 /view/index.php 返回 false
额,看来还是要懂点安卓开发基础才行。O(∩_∩)O谢谢
0
@小白变老白 curl需要读取当前目录的resolv.conf进行DNS.
而resolv.conf我放在了网站根目录下,所以你的脚本里运行curl的部分也应该放在网站根目录下,可以是直接的也可以是间接的,比如:
/resolv.conf
nameserver 180.76.76.76

/index.php
require __DIR__.'/include/common.php';
foo();

/include/common.php
require __DIR__.'/functions.php';

/include/functions.php
function foo() {
  require __DIR__.'/../view/index.php';
}

/view/index.php
header('Content-Type: text/plain; charset=GBK');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
exit();

访问 /index.php 正常
访问 /view/index.php 返回 false
0

引用来自“eechen”的评论

@小白变老白 我把PHPDroid的网站根目录调整到SD卡主要为了方便大家修改体验,真实应用肯定要把网站根目录放在应用下的,start.sh里有说明,指定下参数就好.还有,开发时其实并不需要在手机上运行PHP代码,无论你在Linux还是Windows还是Mac,启动PHP内置HTTP服务器就可以自由在你的桌面上编程了,各种都搞得差不多了,在把代码放到应用的SD卡目录里进行测试.

还有就是你要打包自己的应用,则需要自己下载Android Studio和Android SDK,新建自己的项目,然后把我在phpdroid_20160703.7z里提供的代码和assets放到你的项目里面,然后打包发布自己的应用就好了.
额,我在自己的项目里面随便建了一个接口,post传一个数字,将值*50后使用json返回 ,在应用里面使用curl方法调用, 打开curl_error 会提示我 ‘couldnt resolve host ***.com’说无法解析主机
接口地址 http://cic.com.hk/test00.php
传值 $arr['nub'] = 50
0
@小白变老白 我把PHPDroid的网站根目录调整到SD卡主要为了方便大家修改体验,真实应用肯定要把网站根目录放在应用下的,start.sh里有说明,指定下参数就好.还有,开发时其实并不需要在手机上运行PHP代码,无论你在Linux还是Windows还是Mac,启动PHP内置HTTP服务器就可以自由在你的桌面上编程了,各种都搞得差不多了,在把代码放到应用的SD卡目录里进行测试.

还有就是你要打包自己的应用,则需要自己下载Android Studio和Android SDK,新建自己的项目,然后把我在phpdroid_20160703.7z里提供的代码和assets放到你的项目里面,然后打包发布自己的应用就好了.
0

引用来自“小白变老白”的评论

怎么在window下PC端来测试APP呢 楼主的方法没看懂啊

引用来自“eechen”的评论

你安装5.8MB的PHPDroid的APK后,用USB线连接手机跟电脑,然后就可以在电脑里的文件管理器查看手机SD卡内容,SD卡下的phpdroid目录就是网站的根目录,你把你的PHP脚本放到这个目录里,然后在手机启动应用就能看到你写的效果了.

引用来自“小白变老白”的评论

哦哦 我以为直接在浏览器里面看呢...前面不是说用浏览器的移动模式输入IP地址加端口访问么
如果你要在电脑上输入Android手机无线局域网IP访问PHPDroid也是可以的,因为Android是没有防火墙的说法,只需要把start.sh里启动PHP时指定的地址127.0.0.2改为0.0.0.0即可通过电脑访问.不过我打包的应用只监听本地127.0.0.2上的端口,所以局域网其他设备是无法访问的,而且我在PHP启动路由auth.php里增加了随机的UserAgent校验(ua.php),就算手机上的其他浏览器也是无法访问的,简言之,只有应用打开的WebView设置随机生成的UserAgent后才能访问PHPDroid里的资源.
0

引用来自“小白变老白”的评论

怎么在window下PC端来测试APP呢 楼主的方法没看懂啊

引用来自“eechen”的评论

你安装5.8MB的PHPDroid的APK后,用USB线连接手机跟电脑,然后就可以在电脑里的文件管理器查看手机SD卡内容,SD卡下的phpdroid目录就是网站的根目录,你把你的PHP脚本放到这个目录里,然后在手机启动应用就能看到你写的效果了.
哦哦 我以为直接在浏览器里面看呢...前面不是说用浏览器的移动模式输入IP地址加端口访问么
0

引用来自“小白变老白”的评论

怎么在window下PC端来测试APP呢 楼主的方法没看懂啊
你安装5.8MB的PHPDroid的APK后,用USB线连接手机跟电脑,然后就可以在电脑里的文件管理器查看手机SD卡内容,SD卡下的phpdroid目录就是网站的根目录,你把你的PHP脚本放到这个目录里,然后在手机启动应用就能看到你写的效果了.
0
怎么在window下PC端来测试APP呢 楼主的方法没看懂啊
0
Android 4.4之前,WebView底层实现不是Chromium,所以性能很一般.
这时如果还用AngularJS这类复杂的前端框架,体验就更不好了. 我推荐使用jQuery 2 (84KB) + jQuery Mobile Touch Events (8KB). jQuery Mobile 也是一个挺重的框架,这里只用它提供的触摸事件就够了,其他自己实现. 又因为 jQuery Mobile 1.4.5 还不支持 jQuery 3,所以可以配合 jQuery 2 使用. jQuery 1和2和3这几个大版本,它们的API基本都是相同的,主要区别在于1支持IE6/7/8, 而Android上并不需要考虑IE的兼容.

jQuery Mobile官方提供了一个Alpha版本的Download Builder
可以用来定制自己用到的功能,比如触摸事件(Touch Events):
访问 jQuery Mobile 官网,找到 Download Builder 页面,
勾选 Events 下的 Touch 然后点击页面下方的 Build My Download 下载.

有人可能会说,为什么不用Zepto?
zepto.min.js是25KB,jquery-2.2.4.min.js是84KB,体积上看的确Zepto更小.但更小并不意味着执行效率更高,有人测试过,jQuery2效率要比Zepto高不少.而且就算不谈效率,用jQuery2也能保证功能性和使用各种jQuery插件.jQuery2是官方对jQuery的重构,抛弃IE6/7/8的历史包袱,更加高效,并且jQuery2兼容jQuery1插件(比如幻灯片插件flexslider),适合应用于没有IE困扰的移动浏览器.
顶部