alibaba / AndFix

AndFix is a library that offer hot-fix for Android App.
Other
6.97k stars 1.6k forks source link

apkpatch工具类diff 方法 新增类 执行不到的问题,见注释 #345

Open zyl409214686 opened 7 years ago

zyl409214686 commented 7 years ago

com.euler.patch.diff 包下DexDiffer类。

public DiffInfo diff(File newFile, File oldFile)
    throws IOException
  {
    DexBackedDexFile newDexFile = DexFileFactory.loadDexFile(newFile, 19, 
      true);
    DexBackedDexFile oldDexFile = DexFileFactory.loadDexFile(oldFile, 19, 
      true);
    DiffInfo info = DiffInfo.getInstance();
    //此行代码是否应该放入第一个for循环中,每次遍历都重置一下状态
    boolean contains = false;
    for (DexBackedClassDef newClazz : newDexFile.getClasses()) {
      Set oldclasses = oldDexFile
        .getClasses();
      for (DexBackedClassDef oldClazz : oldclasses) {
        if (newClazz.equals(oldClazz)) {
          compareField(newClazz, oldClazz, info);
          compareMethod(newClazz, oldClazz, info);
          contains = true;
          break;
        }
      }
      //1、场景是现在类有修改、并且有新增类
      if (contains)
        continue;
     //即使有新增类这里也不会被执行到。
      info.addAddedClasses(newClazz);
    }

    return info;
  }