transforming const-string to const-string/jumbo generates an invalid dex
public class JumboRewriter extends ClassVisitor {
private boolean jumboON = false;
public JumboRewriter(int api, ClassVisitor cv, boolean jumboON) {
super(api, cv);
this.jumboON = jumboON;
}
@Override
public MethodVisitor visitMethod(int access, String name, String desc,
String[] signature, String[] exceptions) {
MethodVisitor mv = cv.visitMethod(access, name, desc,
signature, exceptions);
if(jumboON)
return new JumboMethodVisitor(Opcodes.ASM4, mv);
else
return mv;
}
}
import org.ow2.asmdex.MethodVisitor;
import org.ow2.asmdex.Opcodes;
public class JumboMethodVisitor extends MethodVisitor implements Opcodes{
public JumboMethodVisitor(int api, MethodVisitor mv) {
super(api, mv);
// TODO Auto-generated constructor stub
}
public void visitStringInsn(int opcode,
int destinationRegister,
java.lang.String string)
{
super.visitStringInsn(Opcodes.INSN_CONST_STRING_JUMBO,
destinationRegister, string);
}
}
----------------
File dexFile = new File(inputFile);
ApplicationWriter aw = new ApplicationWriter();
ApplicationVisitor avr = new ApplicationVisitorRaw(aw);
aw.visit();
ApplicationVisitorRaw.skipRHelper = skip;
ApplicationReader(Opcodes.ASM4, dexFile);
ar.accept(avr, 0);
ApplicationVisitorRaw.skipRHelper = false;
aw.visitEnd();
byte[] b = aw.toByteArray();
FileOutputStream fout = new FileOutputStream(outFile);
fout.write(b);
fout.close();