【发布时间】:2017-03-26 14:37:08
【问题描述】:
我正在使用 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);
但是有了这个,它将替换所有其他库中的这个类,这也会导致问题。我希望它只有在具有某些包的类中才被替换。我可以在上面添加那种过滤器吗?
【问题讨论】: