“家”计划:Android开发用HTTP进行文件共享
最近老妈一直抱怨传照片连个USB好麻烦,给别人传照片还要开蓝牙。
于是需求一来,那就动手写个程序解决下呗。
首先的思路肯定是使用现有的库,Netty和NanoHttpd都是不错的选择,但是还要去研究它怎么用,并且有一大堆繁琐的错误处理和文件读写缓存处理要做,有没有方法能疾速缩短开发周期呢?
于是掂量掂量刚编译好的Android版Nginx 1.9.5,要不直接调用它!
Android Nginx 1.9.5的编译请参阅:文章 拥抱Android:编译nginx搭建移动平台 |编译脚本 nginx-1.9.5.sh
有了nginx,一切变得简单了,只要能想办法让Android App去启一个单独的进程运行nginx就可以达到HTTP文件索引服务的目标。
第一步,我们需要将nginx放到资源文件夹里,然后用代码把它读出来写到app自身data文件夹里。
这个GetResource,InputStream再结合FileOutputStream很快就能搞定。
于是接着写了个class NginxServer使用Runtime.getRuntime.exec去启动新进程。
结果是nginx死活运行不起来,adb shell进去查看nginx文件,原来没有可执行权限,加个可执行。
可以执行了,又报了socket permission denied。是没有开Android App的网络权限,那就在AndroidManifest.xml里加个申明好了。
后面nginx终于可以执行了,打开浏览器可以显示404错误了。
下面再来一个class NginxConf专门生成nginx的配置文件,用户输入一个文件夹路径,把server里location的alias设置成这个路径,开启autoindex,一个HTTP文件索引服务立刻就完成了。
到哪share文件,以前是在Android的模拟命令行写python -m SimpleHTTPServer,现在就直接输入一个路径,开始服务!
因为这个nginx当时编译的时候包含了https和mail的功能,甚至连websocket都支持了。所以下一步就是继续扩展这个app的功能。
首先是可以把编译好的python(点击打开链接)或者nodejs(点击打开链接)拿过来,打包好必要的库成zip放在资源里,需要的时候释放出来,完全可以做应用服务器了!
比如python装好了,把Django, flup准备好,到时候app运行两个Process,一个是python manage.py runfcgi,一个是nginx;nginx配置好fcgipass,一切完美!
好了,今天就洗洗睡吧。呃,就这么过了11.11,也是醉了 -_-///
以上就介绍了“家”计划:Android开发用HTTP进行文件共享,包括了索引,github,AndroidManifest.xml方面的内容,希望对PHP教程有兴趣的朋友有所帮助。