java代码编译得到smali代码
首先用Sublime(其他文本编辑器也可)编写一个java类
class A{
String s = new String("text");
}
第二步:使用javac命令编译java文件得到class文件
javac是JDK自带的
javac A.java
第三步:使用jar命令编译class文件得到jar文件
jar是JDK自带的
jar cvf A.jar A.class
第四步:使用dx命令将jar文件编译成dex文件
dx.bat在Android SDK/build-tools/某一个版本下..
dx --dex --output A.dex A.jar
第五步:使用baksmali命令将dex文件反编译成smali文件
baksmali.jar可以网上去下载
java -jar baksmali-2.1.3.jar A.dex
最终得到一个out文件夹,里面就是我们需要的A.smali文件
.class LA;
.super Ljava/lang/Object;
.source "A.java"
# instance fields
.field s:Ljava/lang/String;
# direct methods
.method constructor <init>()V
.registers 3
.prologue
.line 1
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 2
new-instance v0, Ljava/lang/String;
const-string v1, "text"
invoke-direct {v0, v1}, Ljava/lang/String;-><init>(Ljava/lang/String;)V
iput-object v0, p0, LA;->s:Ljava/lang/String;
return-void
.end method
因为在热修复框架中,smali是绕不过去的