为什么用java.util.zip
zip包可以在不解压包的情况下,获取指定文件的流,这样可以一个普遍的规则来获取指定文件的内容。例如,APK中RSA信息存在在META-INF目录下,并且后缀名为RSA,这样就可以唯一获取到它。当然,也可以获取我们任何想要的文件信息。
当然对于APK,也可以直接全部解压出来再读取文件,这不是我想要的,因此,在多线程情况下,为此需要保存一个目录与APK的映射关系。
为什么能读取APK文件
可以注意到,直接将APK文件的后缀改成ZIP,文件也是能正常解压的。这是表象。关于内延,可以去参阅APK的生成规则,可以发现这两者的编码规则是一致的!
代码
/**
* Get the RSA infomation from APK file
*
* @param ApkPath the path of apkFile
* @return RSA String that base on BASE64
*/
public String getApkRSAContent(String apkPath){
byte[] buf =null;
ZipFile zipFile = null;
try {
zipFile = new ZipFile(apkPath);//打开ZIP、APK文件
Enumeration<?> zipEnum = zipFile.entries(); //获取包中的文