package com.camnter.patch.ref; import com.camnter.patch.utils.NuwaProcessor; import java.io.File; import java.io.InputStream; import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarFile; import org.apache.commons.io.FileUtils; /** * Created by shoyu666 on 16/7/16. * * https://github.com/dodola/RocooFix/blob/master/buildsrc/src/main/groovy/com/dodola/rocoofix/ref/PatchRefScan.java */ public class PatchRefScan { /** * 判断className是否调用了补丁,如果是加入补丁 * @param className jar包中的一个类 * @param allref className类的依赖 * @param patchClasses 补丁类 */ public static void addClassIfRefPatchClass(JarEntry jarEntry, String className, Set<String> allref, Set<String> patchClasses, JarFile alljar, File patchDir) throws Exception{ for(String ref:allref){ if(patchClasses.contains(ref+".class")){ //该类如果引用了补丁 addClasstoPatch(jarEntry,className,alljar,patchDir); break; } } } public static void addClasstoPatch(JarEntry jarEntry,String className,JarFile alljar,File patchDir) throws Exception{ System.out.println("============addClasstoPatch======"+className); File entryFile = new File(patchDir,className); if(!entryFile.exists()){ InputStream inputStreamX = alljar.getInputStream(jarEntry); byte[] bytes = NuwaProcessor.referHackWhenInit(inputStreamX); FileUtils.writeByteArrayToFile(entryFile, bytes); } } }