Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7160883
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 28, 20262026-05-28T13:28:17+00:00 2026-05-28T13:28:17+00:00

I have tried to invoke DX Tool at Runtime. My main idea is to

  • 0

I have tried to invoke DX Tool at Runtime. My main idea is to generate a Dexfile and then load into Android System dynamically. I have some mistakes but i think that it is possible to generate a dile directly. The following code try to generate a simple HelloWorld Bean with a constructor. Can someone help me?

public class HelloWorld{

private String message;

public HelloWorld(){}

public String getMessage(){
return message;}

public void setMessage(String message){
this.message=message;
}
}

My sample code is the next:

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;

import java.io.OutputStream;
import java.util.ArrayList;

import com.android.dx.rop.code.BasicBlock;
import com.android.dx.rop.code.BasicBlockList;
import com.android.dx.rop.code.FillArrayDataInsn;
import com.android.dx.rop.code.Insn;
import com.android.dx.rop.code.InsnList;
import com.android.dx.rop.code.LocalVariableInfo;
import com.android.dx.rop.code.PlainInsn;
import com.android.dx.rop.code.RegisterSpec;
import com.android.dx.rop.code.RegisterSpecList;
import com.android.dx.rop.code.Rop;
import com.android.dx.rop.code.RopMethod;
import com.android.dx.rop.code.SourcePosition;
import com.android.dx.rop.cst.Constant;
import com.android.dx.rop.cst.CstFieldRef;
import com.android.dx.rop.cst.CstMethodRef;
import com.android.dx.rop.cst.CstNat;
import com.android.dx.rop.cst.CstType;
import com.android.dx.rop.cst.CstUtf8;
import com.android.dx.rop.type.StdTypeList;
import com.android.dx.rop.type.Type;
import com.android.dx.util.IntList;


import com.android.dx.dex.code.BlockAddresses;
import com.android.dx.dex.code.CatchBuilder;
import com.android.dx.dex.code.CatchHandlerList;
import com.android.dx.dex.code.CatchTable;
import com.android.dx.dex.code.CstInsn;
import com.android.dx.dex.code.DalvOps;
import com.android.dx.dex.code.Dop;
import com.android.dx.dex.code.InsnFormat;
import com.android.dx.dex.code.SimpleInsn;
import com.android.dx.dex.code.StdCatchBuilder;

import com.android.dx.dex.code.OutputFinisher;
import com.android.dx.dex.code.DalvCode;
import com.android.dx.dex.code.form.Form10t;
import com.android.dx.dex.code.form.Form10x;
import com.android.dx.dex.code.form.Form11x;
import com.android.dx.dex.code.form.Form12x;
import com.android.dx.dex.code.form.Form22c;
import com.android.dx.dex.code.form.Form22x;
import com.android.dx.dex.code.form.Form35c;
import com.android.dx.dex.file.ClassDefItem;
import com.android.dx.dex.file.DexFile;
import com.android.dx.dex.file.EncodedField;
import com.android.dx.dex.file.EncodedMethod;

public class Main {

        private static DexFile outputDex;

        /**
         * Prints the usage message.
         */

    public void createDexFile() throws Exception{
        CstType type=new CstType(Type.intern("Lmnt/sdcard/HolaMundo;")); 



        outputDex=new DexFile();

        OutputStream fileOutputStream=new FileOutputStream("classes.dex");
        /***Class***/
        ClassDefItem clazz=new ClassDefItem(type, 1, new CstType(Type.intern("Ljava/lang/Object;")), new StdTypeList(0), new CstUtf8("HolaMundo.java"));

        /***Fields***/
        EncodedField field=new EncodedField(new CstFieldRef(type,new CstNat(new CstUtf8("message"),new CstUtf8("Ljava/lang/String;"))),2);

        clazz.addInstanceField(field);


        /***Methods***/
        /***Constructor***/
        CstMethodRef methodref=new CstMethodRef(type,new CstNat(new CstUtf8("<init>"),new CstUtf8("()V")));
        /*Rop opcode1=new Rop(1,new Type("V", Type.BT_VOID),new StdTypeList(0),new StdTypeList(0),1,false,"nop");
        Rop opcode2=new Rop(2,new Type("I",Type.BT_INT),new StdTypeList(Type.BT_INT),new StdTypeList(0),1,false,"move-int");
        Rop opcode3=new Rop(2,new Type("J",Type.BT_LONG),new StdTypeList(Type.BT_LONG),new StdTypeList(0),1,false,"move-long");
        Rop opcode4=new Rop(2,new Type("F",Type.BT_FLOAT),new StdTypeList(Type.BT_FLOAT),new StdTypeList(0),1,false,"move-float");
        Rop opcode5=new Rop(2,new Type("D",Type.BT_DOUBLE),new StdTypeList(Type.BT_DOUBLE),new StdTypeList(0),1,false,"move-double");
        Rop opcode6=new Rop(2,Type.intern("Ljava/lang/Object;"),new StdTypeList(Type.intern("Ljava/lang/Object;").getBasicType()),new StdTypeList(0),1,false,"move-object");
        Rop opcode7=new Rop(2,new Type("<addr>", Type.BT_ADDR),new StdTypeList(Type.BT_ADDR),new StdTypeList(0),1,false,"move-return-address");
        Rop opcode8=new Rop(3,new Type("I",Type.BT_INT),new StdTypeList(0),new StdTypeList(0),1,false,"move-param-int");
        Rop opcode9=new Rop(3,new Type("J",Type.BT_LONG),new StdTypeList(0),new StdTypeList(0),1,false,"move-param-long");
        Rop opcode10=new Rop(3,new Type("F",Type.BT_FLOAT),new StdTypeList(0),new StdTypeList(0),1,false,"move-param-float");
        Rop opcode11=new Rop(3,new Type("D",Type.BT_DOUBLE),new StdTypeList(0),new StdTypeList(0),1,false,"move-param-double");
        Rop opcode12=new Rop(3,Type.intern("Ljava/lang/Object;"),new StdTypeList(0),new StdTypeList(0),1,false,"move-param-object");
        Rop opcode13=new Rop(5,new Type("I",Type.BT_INT),new StdTypeList(0),new StdTypeList(0),1,false,"const-int");
        Rop opcode14=new Rop(5,new Type("J",Type.BT_LONG),new StdTypeList(0),new StdTypeList(0),1,false,"const-long");
        Rop opcode15=new Rop(5,new Type("F",Type.BT_FLOAT),new StdTypeList(0),new StdTypeList(0),1,false,"const-float");
        Rop opcode16=new Rop(5,new Type("D",Type.BT_DOUBLE),new StdTypeList(0),new StdTypeList(0),1,false,"const-double");
        Rop opcode17=new Rop(5,Type.intern("Ljava/lang/Object;"),new StdTypeList(0),new StdTypeList(Type.intern("Ljava/lang/Error;").getBasicType()),6,false,"const-object");
        Rop opcode18=new Rop(5,Type.intern("Ljava/lang/Object;"),new StdTypeList(0),new StdTypeList(0),1,false,"const-object-nothrow");
        Rop opcode19=new Rop(6,new Type("V", Type.BT_VOID),new StdTypeList(0),new StdTypeList(0),3,false,"goto");
        Rop opcode20=new Rop(7,new Type("V", Type.BT_VOID),new StdTypeList(Type.BT_INT),new StdTypeList(0),4,false,"if-eqz-int");
        Rop opcode21=new Rop(8,new Type("V", Type.BT_VOID),new StdTypeList(Type.BT_INT),new StdTypeList(0),4,false,"if-nez-int");
        Rop opcode22=new Rop(9,new Type("V", Type.BT_VOID),new StdTypeList(Type.BT_INT),new StdTypeList(0),4,false,"if-ltz-int");
        Rop opcode23=new Rop(10,new Type("V", Type.BT_VOID),new StdTypeList(Type.BT_INT),new StdTypeList(0),4,false,"if-eqz-int");
        Rop opcode24=new Rop(11,new Type("V", Type.BT_VOID),new StdTypeList(Type.BT_INT),new StdTypeList(0),4,false,"if-lez-int");
        Rop opcode25=new Rop(12,new Type("V", Type.BT_VOID),new StdTypeList(Type.BT_INT),new StdTypeList(0),4,false,"if-gtz-int");
        Rop opcode26=new Rop(7,new Type("V", Type.BT_VOID),new StdTypeList(Type.intern("Ljava/lang/Object;").getBasicType()),new StdTypeList(0),4,false,"if-nez-object");
        Rop opcode27=new Rop(8,new Type("V", Type.BT_VOID),new StdTypeList(Type.intern("Ljava/lang/Object;").getBasicType()),new StdTypeList(0),4,false,"if-eqz-object");
        Rop opcode28=new Rop(7,new Type("V", Type.BT_VOID),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),4,false,"if-eq-NTI");
        Rop opcode29=new Rop(8,new Type("V", Type.BT_VOID),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),4,false,"if-ne-int");
        Rop opcode30=new Rop(9,new Type("V", Type.BT_VOID),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),4,false,"if-lt-int");
        Rop opcode31=new Rop(10,new Type("V", Type.BT_VOID),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),4,false,"if-ge-int");
        Rop opcode32=new Rop(11,new Type("V", Type.BT_VOID),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),4,false,"if-le-int");
        Rop opcode33=new Rop(12,new Type("V", Type.BT_VOID),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),4,false,"if-gt-int");
        Rop opcode34=new Rop(7,new Type("V", Type.BT_VOID),StdTypeList.make(Type.intern("Ljava/lang/Object;"),Type.intern("Ljava/lang/Object;")),new StdTypeList(0),4,false,"if-eq-object");
        Rop opcode35=new Rop(8,new Type("V", Type.BT_VOID),StdTypeList.make(Type.intern("Ljava/lang/Object;"),Type.intern("Ljava/lang/Object;")),new StdTypeList(0),4,false,"if-ne-object");
        Rop opcode36=new Rop(13,new Type("V", Type.BT_VOID),new StdTypeList(Type.BT_INT),new StdTypeList(0),5,false,"switch");
        Rop opcode37=new Rop(14,new Type("I", Type.BT_INT),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),1,false,"add-int");
        Rop opcode38=new Rop(14,new Type("J", Type.BT_LONG),StdTypeList.make(new Type("J",Type.BT_LONG),new Type("J",Type.BT_LONG)),new StdTypeList(0),1,false,"add-long");
        Rop opcode39=new Rop(14,new Type("F", Type.BT_FLOAT),StdTypeList.make(new Type("F",Type.BT_FLOAT),new Type("F",Type.BT_FLOAT)),new StdTypeList(0),1,false,"add-float");
        Rop opcode40=new Rop(14,new Type("D", Type.BT_DOUBLE),StdTypeList.make(new Type("D",Type.BT_DOUBLE),new Type("D",Type.BT_DOUBLE)),new StdTypeList(0),1,false,"add-double");
        Rop opcode41=new Rop(15,new Type("I", Type.BT_INT),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),1,false,"sub-int");
        Rop opcode42=new Rop(15,new Type("J", Type.BT_LONG),StdTypeList.make(new Type("J",Type.BT_LONG),new Type("J",Type.BT_LONG)),new StdTypeList(0),1,false,"sub-long");
        Rop opcode43=new Rop(15,new Type("F", Type.BT_FLOAT),StdTypeList.make(new Type("F",Type.BT_FLOAT),new Type("F",Type.BT_FLOAT)),new StdTypeList(0),1,false,"sub-float");
        Rop opcode44=new Rop(15,new Type("D", Type.BT_DOUBLE),StdTypeList.make(new Type("D",Type.BT_DOUBLE),new Type("D",Type.BT_DOUBLE)),new StdTypeList(0),1,false,"sub-double");
        Rop opcode45=new Rop(16,new Type("I", Type.BT_INT),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),1,false,"mul-int");
        Rop opcode46=new Rop(16,new Type("J", Type.BT_LONG),StdTypeList.make(new Type("J",Type.BT_LONG),new Type("J",Type.BT_LONG)),new StdTypeList(0),1,false,"mul-long");
        Rop opcode47=new Rop(16,new Type("F", Type.BT_FLOAT),StdTypeList.make(new Type("F",Type.BT_FLOAT),new Type("F",Type.BT_FLOAT)),new StdTypeList(0),1,false,"mul-float");
        Rop opcode48=new Rop(16,new Type("D", Type.BT_DOUBLE),StdTypeList.make(new Type("D",Type.BT_DOUBLE),new Type("D",Type.BT_DOUBLE)),new StdTypeList(0),1,false,"mul-double");
        Rop opcode49=new Rop(17,new Type("I", Type.BT_INT),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),StdTypeList.make(Type.intern("Ljava/lang/Error;"),Type.intern("Ljava/lang/ArithmeticException;")),6,false,"div-int");
        Rop opcode50=new Rop(17,new Type("J", Type.BT_LONG),StdTypeList.make(new Type("J",Type.BT_LONG),new Type("J",Type.BT_LONG)),StdTypeList.make(Type.intern("Ljava/lang/Error;"),Type.intern("Ljava/lang/ArithmeticException;")),6,false,"div-long");
        Rop opcode51=new Rop(17,new Type("F", Type.BT_FLOAT),StdTypeList.make(new Type("F",Type.BT_FLOAT),new Type("F",Type.BT_FLOAT)),new StdTypeList(0),1,false,"div-float");
        Rop opcode52=new Rop(17,new Type("D", Type.BT_DOUBLE),StdTypeList.make(new Type("D",Type.BT_DOUBLE),new Type("D",Type.BT_DOUBLE)),new StdTypeList(0),1,false,"div-double");
        Rop opcode53=new Rop(18,new Type("I", Type.BT_INT),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),StdTypeList.make(Type.intern("Ljava/lang/Error;"),Type.intern("Ljava/lang/ArithmeticException;")),6,false,"rem-int");
        Rop opcode54=new Rop(18,new Type("J", Type.BT_LONG),StdTypeList.make(new Type("J",Type.BT_LONG),new Type("J",Type.BT_LONG)),StdTypeList.make(Type.intern("Ljava/lang/Error;"),Type.intern("Ljava/lang/ArithmeticException;")),6,false,"rem-long");
        Rop opcode55=new Rop(18,new Type("F", Type.BT_FLOAT),StdTypeList.make(new Type("F",Type.BT_FLOAT),new Type("F",Type.BT_FLOAT)),new StdTypeList(0),1,false,"rem-float");
        Rop opcode56=new Rop(18,new Type("D", Type.BT_DOUBLE),StdTypeList.make(new Type("D",Type.BT_DOUBLE),new Type("D",Type.BT_DOUBLE)),new StdTypeList(0),1,false,"rem-double");
        Rop opcode57=new Rop(19,new Type("I", Type.BT_INT),new StdTypeList(Type.BT_INT),new StdTypeList(0),1,false,"neg-int");
        Rop opcode58=new Rop(19,new Type("J", Type.BT_LONG),new StdTypeList(Type.BT_LONG),new StdTypeList(0),1,false,"neg-long");
        Rop opcode59=new Rop(19,new Type("F", Type.BT_FLOAT),new StdTypeList(Type.BT_FLOAT),new StdTypeList(0),1,false,"neg-float");
        Rop opcode60=new Rop(19,new Type("D", Type.BT_DOUBLE),new StdTypeList(Type.BT_DOUBLE),new StdTypeList(0),1,false,"neg-double");
        Rop opcode61=new Rop(20,new Type("I", Type.BT_INT),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),1,false,"and-int");
        Rop opcode62=new Rop(20,new Type("J", Type.BT_LONG),StdTypeList.make(new Type("J",Type.BT_LONG),new Type("J",Type.BT_LONG)),new StdTypeList(0),1,false,"and-long");
        Rop opcode63=new Rop(21,new Type("I", Type.BT_INT),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),1,false,"or-int");
        Rop opcode64=new Rop(21,new Type("J", Type.BT_LONG),StdTypeList.make(new Type("J",Type.BT_LONG),new Type("J",Type.BT_LONG)),new StdTypeList(0),1,false,"or-long");
        Rop opcode65=new Rop(22,new Type("I", Type.BT_INT),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),1,false,"xor-int");
        Rop opcode66=new Rop(22,new Type("J", Type.BT_LONG),StdTypeList.make(new Type("J",Type.BT_LONG),new Type("J",Type.BT_LONG)),new StdTypeList(0),1,false,"xor-long");
        Rop opcode67=new Rop(23,new Type("I", Type.BT_INT),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),1,false,"shl-int");
        Rop opcode68=new Rop(23,new Type("J", Type.BT_LONG),StdTypeList.make(new Type("J",Type.BT_LONG),new Type("I",Type.BT_INT)),new StdTypeList(0),1,false,"shl-long");
        Rop opcode69=new Rop(24,new Type("I", Type.BT_INT),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),1,false,"shr-int");
        Rop opcode70=new Rop(24,new Type("J", Type.BT_LONG),StdTypeList.make(new Type("J",Type.BT_LONG),new Type("I",Type.BT_INT)),new StdTypeList(0),1,false,"shr-long");
        Rop opcode71=new Rop(25,new Type("I", Type.BT_INT),StdTypeList.make(new Type("I",Type.BT_INT),new Type("I",Type.BT_INT)),new StdTypeList(0),1,false,"ushr-int");
        Rop opcode72=new Rop(25,new Type("J", Type.BT_LONG),StdTypeList.make(new Type("J",Type.BT_LONG),new Type("I",Type.BT_INT)),new StdTypeList(0),1,false,"ushr-long");
        Rop opcode73=new Rop(26,new Type("I", Type.BT_INT),new StdTypeList(Type.BT_INT),new StdTypeList(0),1,false,"not-int");
        Rop opcode74=new Rop(26,new Type("J", Type.BT_LONG),new StdTypeList(Type.BT_LONG),new StdTypeList(0),1,false,"not-long");
        Rop opcode75=new Rop(14,new Type("I", Type.BT_INT),new StdTypeList(Type.BT_INT),new StdTypeList(0),1,false,"add-const-int");
        Rop opcode76=new Rop(14,new Type("J", Type.BT_LONG),new StdTypeList(Type.BT_LONG),new StdTypeList(0),1,false,"add-const-long");
        Rop opcode77=new Rop(14,new Type("F", Type.BT_FLOAT),new StdTypeList(Type.BT_FLOAT),new StdTypeList(0),1,false,"add-const-float");
        Rop opcode78=new Rop(14,new Type("D", Type.BT_DOUBLE),new StdTypeList(Type.BT_DOUBLE),new StdTypeList(0),1,false,"add-const-double");
        */

        Rop opcodeMethod1=new Rop(3,Type.intern("Ljava/lang/Object;"),new StdTypeList(0),new StdTypeList(0),1,false,"move-param-object");
        Rop opcodeMethod2=new Rop(6,new Type("V", Type.BT_VOID),new StdTypeList(0),new StdTypeList(0),3,false,"goto");
        SourcePosition sourcePositionMethod1=new SourcePosition(new CstUtf8("HolaMundo.java"),1,1);
        SourcePosition sourcePositionMethod2=new SourcePosition(new CstUtf8("HolaMundo.java"),2,2);
        RegisterSpec registerSpecMethod1=RegisterSpec.make(0,new Type("NffffHolaMundo;",Type.BT_OBJECT,2147483647));
        RegisterSpec registerSpecMethod2=null;
        RegisterSpec registerSpecMethod0=RegisterSpec.make(0,Type.intern("Ljava/lang/Object;"));
        RegisterSpecList registerSpecListMethod0=new RegisterSpecList(1);
        registerSpecListMethod0.set(0, registerSpecMethod1);
        RegisterSpecList registerSpecListMethod1=new RegisterSpecList(0);
        RegisterSpecList registerSpecListMethod2=new RegisterSpecList(0);
        PlainInsn insn1=new PlainInsn(opcodeMethod1,sourcePositionMethod1,registerSpecMethod1,registerSpecListMethod1);
        PlainInsn insn2=new PlainInsn(opcodeMethod2,sourcePositionMethod2,registerSpecMethod2,registerSpecListMethod2);
        Dop dopMethod0 = new Dop(DalvOps.INVOKE_DIRECT,DalvOps.INVOKE_DIRECT,Form35c.THE_ONE,false,"invoke-direct");
        Dop dopMethod1 = new Dop(DalvOps.RETURN_VOID, DalvOps.RETURN_VOID, Form10x.THE_ONE, false, "return-void");
        CstInsn simpleInsnMethod0=new CstInsn(dopMethod0,sourcePositionMethod1,registerSpecListMethod0,methodref);
        SimpleInsn simpleInsnMethod1=new SimpleInsn(dopMethod1,sourcePositionMethod2,registerSpecListMethod1);
        OutputFinisher outputFinisherMethod1=new OutputFinisher(21,2);
        outputFinisherMethod1.add(simpleInsnMethod0);
        outputFinisherMethod1.add(simpleInsnMethod1);


        /***DalvCode***/

        InsnList insnList1=new InsnList(2);
        insnList1.set(0, insn1);
        insnList1.set(1, insn2);
        int primarySuccesor1=0;
        int label1=10;
        IntList intList1=new IntList(1);
        insnList1.setImmutable();
        intList1.add(0);
        intList1.setImmutable();
        BasicBlock basicBlock1=new BasicBlock(label1,insnList1,intList1,primarySuccesor1);


        InsnList insnList2=new InsnList(1);
        insnList2.set(0, insn2);
        int primarySuccesor2=11;
        int label2=0;
        IntList intList2=new IntList(11);


        BasicBlockList basicBlockList1=new BasicBlockList(1);
        basicBlockList1.set(0, basicBlock1);


    // Bueno!!  int[] orderMethod1={14,12,0,13};


        /**** Constructor ****/
        int[] orderMethod1={10};
        RopMethod ropMethod1=new RopMethod(basicBlockList1,10);
        BlockAddresses blockAddresses1=new BlockAddresses(ropMethod1);
        StdCatchBuilder stdCatchBuilder1=new StdCatchBuilder(ropMethod1,orderMethod1,blockAddresses1);
        DalvCode code1=new DalvCode(2,outputFinisherMethod1,stdCatchBuilder1);
        EncodedMethod method=new EncodedMethod(methodref,0x10001,code1,new StdTypeList(0));
        clazz.addDirectMethod(method);



        /*** Method setMessage ***/
        CstMethodRef methodref2=new CstMethodRef(type,new CstNat(new CstUtf8("setMessage"),new CstUtf8("(Ljava/lang/String;)V")));
        Dop dopMethod2=new Dop(DalvOps.IPUT_OBJECT,DalvOps.IPUT_OBJECT,Form22c.THE_ONE,false,"iput-object");
        Dop dopMethod3 = new Dop(DalvOps.RETURN_VOID,DalvOps.RETURN_VOID,Form10x.THE_ONE,false,"return-void");

        SourcePosition sourcePositionMethod3=new SourcePosition(new CstUtf8("HolaMundo.java"),2,6);
        SourcePosition sourcePositionMethod4=new SourcePosition(new CstUtf8("HolaMundo.java"),5,7);
        RegisterSpec registerSpecMethod4=RegisterSpec.make(0,Type.intern("Ljava/lang/String;"));
        RegisterSpec registerSpecMethod3=RegisterSpec.make(1, Type.intern("LHolaMundo;"));
        RegisterSpecList registerSpecListMethod3=new RegisterSpecList(2);
        RegisterSpecList registerSpecListMethod4=new RegisterSpecList(0);
        registerSpecListMethod3.set(0,registerSpecMethod3);
        registerSpecListMethod3.set(1,registerSpecMethod4);

        CstFieldRef cstFieldRef1=new CstFieldRef(type,new CstNat(new CstUtf8("message"),new CstUtf8("Ljava/lang/String;")));
        CstInsn simpleInsnMethod2=new CstInsn(dopMethod2,sourcePositionMethod3,registerSpecListMethod3,cstFieldRef1);
        SimpleInsn simpleInsnMethod3 = new SimpleInsn(dopMethod3,sourcePositionMethod4, registerSpecListMethod4);
        OutputFinisher outputFinisherMethod2=new OutputFinisher(22,2);
        outputFinisherMethod2.add(simpleInsnMethod2);
        outputFinisherMethod2.add(simpleInsnMethod3);

        int[] orderMethod2={10};
        RopMethod ropMethod2=new RopMethod(basicBlockList1,10);
        BlockAddresses blockAddresses2=new BlockAddresses(ropMethod2);
        StdCatchBuilder stdCatchBuilder2=new StdCatchBuilder(ropMethod2,orderMethod2,blockAddresses2);

        DalvCode code2=new DalvCode(2,outputFinisherMethod2,stdCatchBuilder2);
        EncodedMethod method2=new EncodedMethod(methodref2,1,code2,new StdTypeList(0));

        clazz.addVirtualMethod(method2);
        /*** Method getMessage ***/
        CstMethodRef methodref3=new CstMethodRef(type,new CstNat(new CstUtf8("getMessage"),new CstUtf8("()Ljava/lang/String;")));
        Dop dopMethod4 = new Dop(DalvOps.IGET_OBJECT, DalvOps.IGET_OBJECT, Form22c.THE_ONE, true, "iget-object");
        Dop dopMethod5 = new Dop(DalvOps.RETURN_OBJECT,DalvOps.RETURN_OBJECT,Form11x.THE_ONE,false,"return-object");
        RegisterSpec registerSpecMethod5=RegisterSpec.make(1, Type.intern("LHolaMundo;"));
        RegisterSpec registerSpecMethod6=RegisterSpec.make(0,Type.intern("Ljava/lang/String;"));
        SourcePosition sourcePositionMethod5=new SourcePosition(new CstUtf8("HolaMundo.java"),2,8);
        SourcePosition sourcePositionMethod6=new SourcePosition(new CstUtf8("HolaMundo.java"),5,9);
        RegisterSpecList registerSpecListMethod5=new RegisterSpecList(2);
        registerSpecListMethod5.set(0, registerSpecMethod5);
        registerSpecListMethod5.set(1,registerSpecMethod6);
        RegisterSpecList registerSpecListMethod6=new RegisterSpecList(1);
        registerSpecListMethod6.set(0, registerSpecMethod6);

        CstFieldRef cstFieldRef2=new CstFieldRef(type,new CstNat(new CstUtf8("message"),new CstUtf8("Ljava/lang/String;")));
        CstInsn simpleInsnMethod4=new CstInsn(dopMethod4,sourcePositionMethod5,registerSpecListMethod5,cstFieldRef2);
        SimpleInsn simpleInsnMethod5=new SimpleInsn(dopMethod5,sourcePositionMethod6,registerSpecListMethod6);
        OutputFinisher outputFinisherMethod3=new OutputFinisher(22,2);
        outputFinisherMethod3.add(simpleInsnMethod4);
        outputFinisherMethod3.add(simpleInsnMethod5);

        int[] orderMethod3={10};
        RopMethod ropMethod3=new RopMethod(basicBlockList1,10);
        BlockAddresses blockAddresses3=new BlockAddresses(ropMethod3);
        StdCatchBuilder stdCatchBuilder3=new StdCatchBuilder(ropMethod3,orderMethod3,blockAddresses3);

        DalvCode code3=new DalvCode(2,outputFinisherMethod3,stdCatchBuilder3);
        EncodedMethod method3=new EncodedMethod(methodref3,1,code3,new StdTypeList(0));
        clazz.addVirtualMethod(method3);
        outputDex.add(clazz);

        outputDex.writeTo(fileOutputStream, null, false);
        fileOutputStream.flush();
        fileOutputStream.close();


        InputStream is = new FileInputStream("mnt/sdcard/classes.dex");

        int len;
        int size = 1024;
        byte[] buf;

        if (is instanceof ByteArrayInputStream) {
          size = is.available();
          buf = new byte[size];
          len = is.read(buf, 0, size);
        } else {
          ByteArrayOutputStream bos = new ByteArrayOutputStream();
          buf = new byte[size];
          while ((len = is.read(buf, 0, size)) != -1)
            bos.write(buf, 0, len);
          buf = bos.toByteArray();
        }
        System.out.println(System.getProperty("user.dir"));
       System.out.println("buf "+buf.toString());
       com.android.dx.command.dexer.Main m=new com.android.dx.command.dexer.Main();
        m.createJar("mnt/sdcard/HelloWorld.jar", buf);
        System.out.println("Yeahhhhh");


    //  ClassDefIt

    }


        /**
         * Returns a copy of the given args array, but without the indicated
         * element.
         *
         * @param orig non-null; original array
         * @param n which element to omit
         * @return non-null; new array
         */
        private static String[] without(String[] orig, int n) {
            int len = orig.length - 1;
            String[] newa = new String[len];
            System.arraycopy(orig, 0, newa, 0, n);
            System.arraycopy(orig, n + 1, newa, n, len - n);
            return newa;
        }



    public static void main(String[] args){

        String[] args2={"--dex","--output=HolaMundo.jar","HolaMundo.class"};
        Main m=new Main();
        try{

            m.createDexFile();

        }catch(Exception e){System.out.println(e.getMessage());}
    }
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-28T13:28:18+00:00Added an answer on May 28, 2026 at 1:28 pm

    I have implemented the following class using ASM and BCEL:

    public class HelloWorld {
        public static void hello(){
            int a=0xabcd;
            int b=0xaaaa;
            int c=a-b;
            String s=Integer.toHexString(c);
            System.out.println(s);
        }
    
    }
    

    Firstly I have used BCEL or ASM to create a new ad-hoc class in SD Card.
    Secondly I have converted the Java Class to a Dex Class with the Dxclient utiliy in SD Card.
    Finally I have created a jar file and then I have loaded this package into the device from SD Card

    DXClient reference

    https://github.com/headius/dexclient/blob/master/src/DexClient.java

    You can chek my code from https://github.com/sciruela/android

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have tried this... Dim myMatches As String() = System.Text.RegularExpressions.Regex.Split(postRow.Item(Post), \b\#\b) But it is
I have tried to use ASP.NET MVC for a while, then I face a
I want to invoke /etc/init.d/tomcat6 in subprocess. I have tried the below code, but
Have tried to find solutions for this and can't really come up with anything.
I have tried <ul id=contact_list> <li id=phone>Local 604-555-5555</li> <li id=i18l_phone>Toll-Free 1-800-555-5555</li> </ul> with #contact_list
I have tried what seems like everything - I've done similiar things many times
I have tried the following two statements: SELECT col FROM db.tbl WHERE col (LIKE
I have tried to integrate the Picasa API on iPhone, compiles fine, but I
I have tried to find how to create DLL-s on linux using google, but
I have tried different examples to filter a gridview by dropdownlist, but is it

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.