搭建App分发系统

学习Flask框架的时候,利用业余时间搭建了一个App分发系统,今天回顾总结一下。
该系统在功能上可以大致分为以下几部分,APP包的解析,APP的上传以及下载。

APP包的解析

这个功能参考了国内几大主要应用分发平台的做法,发现基本上都是借助服务器的配合来完成包内容的解析。其中fir的速度是最快的,但是由于fir对请求的内容进行了加密,只知道上传了内容,却不知道具体上传了什么。还有一个平台是上传了应用的ID,然后服务器返回了相关信息(记不清是哪个平台了)。
本人的做法是提取APP包中的相关文件上传到服务器,服务器解析完毕后回传至浏览器。具体到iOS就是提取IPA内的plist文件,
Android方面是Android.xml文件。但是在Android解析时遇到了一个小问题,如果仅仅是解析Android.xml,无法得到应用名。经过在Google上的不断搜索下,最终采取的做法是,上传一个由AndroidManifest.xml、resources.arsc和res文件夹组成的”mini apk”,然后服务器利用apktool解析得到APP的相关信息。该做法在功能上确实是完成了APP包的解析,但是耗时较长,至少也要20秒左右。如果投入实际应用的话,可能会采用在数据库中关联APK的package和APP名字,或者是由上传者手动填写APP名字。

APP包上传和下载

这一部分其实没有特殊的地方,上传使用multipart/form-data形式的POST请求。下载的时候根据Bundle Identifier/package、以及版本号获取到APP所在地址提供给浏览器就可以了。iOS的下载要涉及到https,从而有一个主题。

自签名证书

安卓下载的时候,只要提供APK所在地址就可了。但是IPA下载的时候要使用itms-services协议,以该形式”itms-services://?action=download-manifest&url=https://xxx.xxx.xxx/xxx.plist" 提供下载地址,IPA的地址在plist文件中。这里的一个关键点是plist放置在采用了https协议的服务器上,我们可以把plist文件放在采用https协议的云平台上。如果是在内网环境中,就需要自签名证书了,刚开始根据一些博客博客中的操作签发了证书,但是却总是无法下载,最后根据https://web.archive.org/web/20160403100211/https://metabrot.rocho.org/jan/selfsign.html 这个地址中的操作完成了自签名证书的签发,最终可以在iPhone上成功安装IPA上了。

总结

这个小工程在时间跨度上有将近两个月,但是真正编写代码的时间可能只有几天。一方面是经常有各种各样的事情,另一方面是在这个过程中也在学习Python和javascript。代码总体而言写的并不好,接下来可以做一些重构方面的工作,命名风格的统一,将一些功能层次化组织一下,一些通用的地方要进行模块化抽离出来。

参考内容