import org.jf.dexlib2.iface.AnnotationElement; //導入方法依賴的package包/類
public static void getMethodAnnotaionPrepareClasses(DexDiffInfo dexDiffInfo, Set prepareclasses){
for (DexBackedMethod method:dexDiffInfo.getModifiedMethods()){
Set extends Annotation>annotations = method.getAnnotations();
if (annotations == null){
continue;
}
for (Annotation annotation:annotations){
String type = annotation.getType();
if (type!= null&&type.startsWith("L")&&type.endsWith(";")){
prepareclasses.add(type.substring(1, type.length() - 1).replace('/', '.'));
System.out.println("prepare class: " + type);
}
Set extends AnnotationElement> elements = annotation.getElements();
for (AnnotationElement dexBackedAnnotationElement:elements){
if (dexBackedAnnotationElement.getValue() instanceof DexBackedArrayEncodedValue){
List extends EncodedValue> values = ((DexBackedArrayEncodedValue) dexBackedAnnotationElement.getValue()).getValue();
for (EncodedValue encodedValue:values) {
if (encodedValue instanceof TypeEncodedValue) {
prepareclasses.add(((TypeEncodedValue) encodedValue).getValue().substring(1, ((TypeEncodedValue) encodedValue).getValue().length() - 1).replace('/', '.'));
System.out.println("prepare class: " + ((TypeEncodedValue) encodedValue).getValue());
}
}
}else if (dexBackedAnnotationElement.getValue() instanceof DexBackedTypeEncodedValue){
String value = ((DexBackedTypeEncodedValue) dexBackedAnnotationElement.getValue()).getValue();
prepareclasses.add(value.substring(1, value.length() - 1).replace('/', '.'));
System.out.println("prepare class: " + value);
}
}
}
}
}