@Override public String getType() { return methodImpl.method.getDefiningClass(); } @Override public String getSignature() { return null; }
@Override public String getType() { return methodImpl.method.getDefiningClass(); } @Override public String getSignature() { return null; }
@Override public String getType() { return methodImpl.method.getDefiningClass(); } @Override public String getSignature() { return null; }
public void addModifiedMethods(DexBackedMethod method) throws PatchException { System.out.println("add modified Method:" + method.getReturnType() + " " + method.getName() + "(" + Formater.formatStringList(method.getParameterTypes()) + ") in Class:" + method.getDefiningClass()); this.modifiedMethods.add(method); if (!modifiedClasses.contains(method.classDef)) { modifiedClasses.add(method.classDef); String className = method.classDef.getType(); addManifestModifiedClass(className); } }
String template = methodRef.getDefiningClass() + "->" + methodRef.getName(); methods.add(template); System.out.println("template: " + template); if (superClasses.containsKey(methodRef.getDefiningClass())) { ArrayList<String> derivedClasses = superClasses.get(methodRef.getDefiningClass()); for (int i = 0; i < derivedClasses.size(); i++) { template = derivedClasses.get(i) + "->" + methodRef.getName(); prepareClasses.add(method.getDefiningClass().substring(1, method.getDefiningClass().length() - 1).replace("/", "."));
@Override public boolean filterMethod(MethodDiffInfo methodDiffInfo) throws PatchException { DexBackedMethod dexBackedMethod = methodDiffInfo.getBackedMethod(); if (dexBackedMethod.getName().equals("<clinit>") || dexBackedMethod.getName().contains("ajc$preClinit")||dexBackedMethod.getName().equals("<init>")||dexBackedMethod.getName().contains("access$")) { return true; } if (methodDiffInfo.getType().equals(DiffType.REMOVE)) { return true; } else if (methodDiffInfo.getType().equals(DiffType.ADD)){ throw new PatchException("can't add method:" + dexBackedMethod.getName() + " in class:" + dexBackedMethod.getDefiningClass()); } if (dexBackedMethod.getParameters().size() > 8) { throw new PatchException("can't patch method:" + dexBackedMethod.getName() + "has Parameters above 8 in class:"+dexBackedMethod.getDefiningClass()); } if (dexBackedMethod.getParameterTypes().contains("J") || dexBackedMethod.getParameterTypes().contains("D") || dexBackedMethod.getParameterTypes().contains("F")) { throw new PatchException("can't patch method:" + dexBackedMethod.getName() + "has ParameterType long,double or float in class:"+dexBackedMethod.getDefiningClass()); } return false; }
+ " " + method.getName() + "(" + Formater.formatStringList(method.getParameterTypes()) + ") in Class:" + method.getDefiningClass()); MethodDiffInfoObject diffInfoObject = new MethodDiffInfoObject(); diffInfoObject.setDiffType(DiffType.ADD); + Formater.formatStringList(method.getParameterTypes()) + ")"); diffInfoObject.setInClass(method.getDefiningClass()); diffInfoObjects.add(diffInfoObject); + " " + method.getName() + "(" + Formater.formatStringList(method.getParameterTypes()) + ") in Class:" + method.getDefiningClass()); MethodDiffInfoObject diffInfoObject = new MethodDiffInfoObject(); diffInfoObject.setDiffType(DiffType.MODIFY); + Formater.formatStringList(method.getParameterTypes()) + ")"); diffInfoObject.setInClass(method.getDefiningClass()); diffInfoObjects.add(diffInfoObject);
for (MethodDiffInfo methodDiffInfo : classDiffInfo.getModifyMethods()) { if (filterMethod(methodDiffInfo)) { System.out.println(methodDiffInfo.getBackedMethod().getDefiningClass()+":"+methodDiffInfo.getBackedMethod().getName()+ " is filtered!"); needFilterMethod.add(methodDiffInfo);