Я использую dexlib2 для перезаписи файлов dex. Мне нужно заменить конкретное имя класса на имя класса моей библиотеки, которое я включу в файл aar. Я использую для этого код ниже:
DexFile dexFile = DexFileFactory.loadDexFile(filePath, Opcodes.forApi(apiLevel));
DexRewriter dexRewriter = new DexRewriter(new RewriterModule() {
@Override
public Rewriter<MethodReference> getMethodReferenceRewriter(Rewriters rewriters) {
return new Rewriter<MethodReference>() {
@Override
public MethodReference rewrite(MethodReference value) {
if (value.getDefiningClass().equals("Ljava/util/Calendar;")
&& value.getName().equals("getInstance")) {
System.out.println("method Ref class:" + value.getDefiningClass());
ImmutableMethodReference methodRef = new ImmutableMethodReference(
"Lcom/mylib/ICalendar;", value.getName(),
value.getParameterTypes(), value.getReturnType());
return methodRef;
}
return value;
}
};
}
});
DexFile rewrittenDexFile = dexRewriter.rewriteDexFile(dexFile);
DexFileFactory.writeDexFile(filePath, rewrittenDexFile);
Но с этим он заменит этот класс во всех других библиотеках, что также вызовет проблемы. Я хочу, чтобы он был заменен, только если он есть в классах с определенными пакетами. можно ли добавить на него такой фильтр?