package com.taobao.android.tpatch.manifest;
import java.io.File;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
/**
* @author lilong
* @create 2017-03-13 上午9:55
*/
public class AndroidManifestDiffFactory {
public Set<DiffItem>diffResuit = new HashSet<DiffItem>();
public void diff(File baseAndroidManifest,File newAndroidManifest) throws Exception {
Manifest baseManifest = AXMLPrint.paresManfiest(baseAndroidManifest);
Manifest newManifest = AXMLPrint.paresManfiest(newAndroidManifest);
diff(baseManifest,newManifest);
}
private void diff(Manifest baseManifest, Manifest newManifest) {
diff(baseManifest.getApplication().activitys,newManifest.getApplication().activitys);
diff(baseManifest.getApplication().providers,newManifest.getApplication().providers);
diff(baseManifest.getApplication().services,newManifest.getApplication().services);
diff(baseManifest.getApplication().receivers,newManifest.getApplication().receivers);
}
private void diff(Collection<? extends Manifest.AndroidBase> baseCollection, Collection<? extends Manifest.AndroidBase>newCollection){
if (newCollection == null||baseCollection == null){
return;
}
for (Manifest.AndroidBase newAndroidBase:newCollection){
String name = newAndroidBase.name;
boolean find = false;
for (Manifest.AndroidBase baseAndroidBase:baseCollection){
String baseName = baseAndroidBase.name;
if (baseName.equals(name)){
find = true;
if (baseAndroidBase.toString().equals(newAndroidBase.toString())){
//do nothind
// diffResuit.add(new DiffItem(DiffType.NONE,newAndroidBase));
}else {
diffResuit.add(new DiffItem(DiffType.MODIFY,newAndroidBase));
}
break;
}
}
if (!find){
diffResuit.add(new DiffItem(DiffType.ADD,newAndroidBase));
}
}
}
public class DiffItem {
public DiffType diffType;
public Manifest.AndroidBase Component;
public DiffItem(DiffType diffType, Manifest.AndroidBase name) {
this.diffType = diffType;
this.Component = name;
}
}
enum DiffType{
ADD,REMOVE,MODIFY,NONE
}
public static void main(String[]args) throws Exception {
AndroidManifestDiffFactory androidManifestDiffFactory = new AndroidManifestDiffFactory();
androidManifestDiffFactory.diff(new File("/Users/lilong/Downloads/10004583@taobao_android_6.5.0/AndroidManifest.xml"),new File("/Users/lilong/Downloads/tpatch-diff/AndroidManifest.xml"));
Set<DiffItem>sets = androidManifestDiffFactory.diffResuit;
System.out.println("xxx");
}
}