javaandroidsmaliapktool

Convert .Java file to .Smali file


I reverse-engineered an Android application with APKTool and got .Smali files as source code output. I converted the .Smali files with an application to .Java files. I was able to successfully edit the .Java files but now I want to convert them back to .Smali so I can recompile the application with the new .Smali files. When I just leave the .Java file there it doesn't recompile it and gives some errors. I couldn't find anything about compiling .Java to .Smali on the Internet so I hope you guys could help me.

Thank you in advance.


Solution

  • You can compile the java classes using a normal java compiler, and then use Android's 'dx' utility to convert the compiled .class files to a dex file. And then run baksmali on the dex file to produce the smali files.

    For example, let's say you have the following code in a java file named "HelloWorld.java":

    public class HelloWorld {
        public static void main(String[] args) {
             System.out.println("Hello World!");
        }
    }
    

    To convert it to smali:

    javac HelloWorld.java
    dx --dex --output=classes.dex HelloWorld.class
    baksmali d classes.dex