sisong / ApkDiffPatch

a C++ library and command-line tools for Zip(Jar,Apk) file Diff & Patch; create minimal delta/differential; support Jar sign(apk v1 sign) & apk v2,v3 sign .
MIT License
310 stars 49 forks source link

关于ApkNormalized的问题 #62

Closed Picasso1990 closed 4 years ago

Picasso1990 commented 4 years ago

您好,如您所说:if your need newZip(patch result) file byte by byte equal, Released newZip := ApkNormalized(newZip) before run ZipDiff, AND You should not modify the zlib version (unless it is certified compatible); if your apk(or jar) file used Jar sign(Apk v1 sign), is same as zip file; if your apk used Apk v2 sign(or Apk v3 sign), Released newZip := AndroidSDK#apksigner(ApkNormalized(newZip)) before ZipDiff;

问题: 1、我这边需要在v2签名的情况下,在apk中进行了patch之后在进行ApkNormalized吗? 2、在v1签名的情况下,是需要对old.apk,new.apk都进行了ApkNormalized之后,在apk合成的之后中需要进行ApkNormalized吗? 3、如果上述问题是需要在apk合成的之后进行ApkNormalized的话,那这个过程是在android手机中进行的,那有这部分的库吗?

thx~~~

sisong commented 4 years ago
  1. “patch之后在进行ApkNormalized吗?”
    不是;ApkNormalized是用于打包阶段的,对apk包进行预处理,处理后的包才是发布包(因为ApkNormalized会破坏v2和v3的签名,所以还需要重新签名); 然后diff和patch发生在这些处理完后的包;
  2. “合成的之后中需要进行ApkNormalized吗?”
    不需要
Picasso1990 commented 4 years ago

那这样是,如果我有两个apk,old.apk和new.apk: 1、在v2/v3签名的情况下,这两个apk都是需要经过ApkNormalized之后进行签名,之后的ZipDiff和ZipPatch之后的oldToNew.apk才能得到和new.apk一致。 2、在v1签名的情况下,需要对这两个apk进行ApkNormalized,这样之后的ZipDiff和ZipPatch之后的oldToNew.apk才能得到和new.apk一致。 这样理解正确吗?

sisong commented 4 years ago

是的; 增加ApkNormalized这个步骤,就是为了patch的输出结果二进制级别的“一致”;
(ApkNormalized的这个过程也兼容谷歌商店的 https://github.com/google/archive-patcher 方案,用于上架Play前的预处理)

Picasso1990 commented 4 years ago

好的,谢谢您~~~