以差分包升级为例(完整包升级方法类似),要完成一个差分包的在线升级必备条件有:
1.安卓apk工具支持
2.差分包制作
3.服务器搭建
4.ota 环境配置
平台:A20/Android4.2.2
第一步:对于支持ota功能的版本,要有以下apk
1.update.apk
2.DownloadProvider.apk
3.DownloadProviderUi.apk(不确定需要不需要这个,应该不需要ui也可以,可以试试不要这个)
第二步:差分包准备
差分包制作需要两个target_files_package(zip 包),即版本信息包,这并不是完整包,只是记录了当前版本的信息。
1.make-j8
2.get_uboot
3.maketarget-files-package(当前版本的target_files_package包)
4.备份out/target/product/crane-xxx/obj/PACKAGING/target_files_intermediates/目录下的*.zip包
5.备份当前版本固件
6.将当前版本的target_files_package拷贝到android根目录下,命名为old_target_files.zip(必须为这个名字,因为制作差分包的命令脚本中写死了这个名字,也可以自行修改)
7.在当前版本基础上做出改变(升级),make -j8,重复1-5
8.makeotapackage_inc生成差分包,路径为out\target\product\crane-XXX\crane_XXX-ota-XXXXXXXX-inc.zip
9.将生成的差分包做好备份,因为下次编译源码会删除已存在的差分包文件
第三步:服务器搭建
前提:安装了java的windos平台
1. 在tomcat官网下载适合宿主机的压缩包,解压缩
2. 配置环境变量 TOMCAT_HOME和CATALINA_HOME 变量值均为安装路径
3. 进入安装目录下的bin目录,点击startup.bat
出现如下图结果证明环境变量设置成功
4. 打开浏览器输入http://localhost:8080,若能进入tomcat欢迎页如下图,则tomcat搭建成功
5. 将tomcat配置为系统为服务,并设置为自启。打开cmd.exe,进入安装目录下的bin目录,运行命令service.batinstall 设置为系统服务。点击tomcat7w.exe或系统服务列表中的tomcat服务设置为自动。
6. 可是试着开机重启一下再打开浏览器测试服务器是否配置成功。
7. (可选)进入tomcat配置目录conf,在server.xml中可将服务端口由8080改为80.
8. 将全志给的服务器端update文件夹拷贝到服务器默认根目录webapp/下
9. 可以在浏览器下输入http://192.168.1.1/update/form.jsp测试是否可以打开如下配置界面,192.168.1.1改成你配置的服务器地址,有必要的话地址加端口。
第四步:OTA服务器端升级环境配置
1. 正式发布之前先以debug用户配置环境。打开parameter.conf文件修改为自己的配置,该文件是用来跟客户端发来的post请求信息匹配的,里面的参数可以增删,只要配置文件里的所有参数能与客户端发来的post请求信息匹配,才会进行下一步动作。否则将不能解析服务器上是否有对应版本的升级包。
2. parameter.conf匹配成功后服务器端会去解析debug.conf(如果用户是非debug用户,将会解析update.conf),所以要更新debug.conf文件中的版本号信息以及xml文件的链接地址
等号左边为版本信息,这个一定要跟客户端的当前版本信息匹配。等号右边为差分包配置文件*.xml文件链接地址。
3.进入xml文件夹,维护debug(正式发布时直接维护update文件夹)文件夹。文件内容如下:
需要维护的内容:
a. 版本号
b. 差分包访问地址
c. 升级日志(描述信息)
d. Md5值(该值由全志提供的UpdateTools.jar工具生成,也可自行在网上下载一个md5信息提取工具试试
4. 差分包放在对应的路径下,至此服务器端配置完成
第五步:OTA客户端升级环境配置
1. 打开客户端apk源码目录下的Utils.java文件
维护服务器地址(需在服务器路径前多加一个update路径才能解析),修改DEBUG = true;
2.客户端主要就是维护apk中的以上两个部分。
补充:
服务器与客户端之间的匹配信息都是从当前版本的buid.prop文件提取出来的,比如:
android版本信息“ro.build.version.release”获得
固件版本 (firmware) “ ro.product.firmware”获得
厂商名称 (brand) “ro.product.brand”获得
机型(device)“ro.product.device”获得
电路板类型(board) “ro.product.board”获得