前言:
前段时间遇到个需求:
1.需要在不安装apk的前提下,获取当前apk的渠道信息。
2.用户在特定的页面下载的apk,需要跳到与app中对应的页面,从而让app的用户体验更好。
第一个需求好处理,只需要解析xml文件就可以获取到渠道信息了,如果不清楚的可以看我这篇博客android 解析未安装apk中的AndroidManifest.xml以及系统源码分析。
第二个需求就不好处理,虽然也可以通过写入androidManifest.xml,但是如果这样的页面过多的话,就需要打很多个包,可以说是一种极端的处理方法。后来又想到过插件化的方式来处理,但是一想,这样也不太好,会导致内部逻辑复杂,同样的服务端要准备多个包来供客户端实现插件化。后来通过公司的一个技术文档了解到,原来zip文件能动态写入信息,我们的apk也就是一个zip文件,它有个Comment属性能动态往里面写入信息,这样就能在不破坏apk的结构的基础上,动态添加需要跳转的页面的信息。那我们只需要把我们的渠道包给到后台,然后后台往里面添加数据就可以了。
在这之前需要先了解下zip的文件结构:
这里有个链接--- ZIP文件结构
它的整体结构是这样的:
<