编译smali文件(生成.dex文件)
需要的东西:
- smali.jar(smali文件编译包)
- HelloXidian.smali(.smali文件)
- Android SDK(安卓软件开发工具包)
- Android Vitual Device Manager(安卓虚拟设备管理器)
贴出smali文件的代码
#Ye olde hello world application
#To assemble and run this on a phone or emulator:
#
#java -jar smali.jar -o classes.dex HelloWorld.smali
#zip HelloWorld.zip classes.dex
#adb push HelloWorld.zip /data/local
#adb shell dalvikvm -cp /data/local/HelloWorld.zip HelloWorld
#
#if you get out of memory type errors when running smali.jar, try
#java -Xmx512m -jar smali.jar HelloWorld.smali
#instead
#定义类名:HelloXidian
.class public LHelloXidian;
#定义父类
.super Ljava/lang/Object;
#声明main()方法
.method public static main([Ljava/lang/String;)V
#程序中使用v0,v1两个寄存器
.registers 2
#字段操作指令:获取Ljava/lang/System中的out字段存入寄存器v1
sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;
#构造字符串:构造“Hello Xidian”字符串,并将其附给寄存器v0
const-string v0, "Hello Xidian"
#方法调用指令:调用对象v1的println()方法打印输出v0中的字符串
invoke-virtual {v1,v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
#返回指令:返回空值
return-void
.end method
将smali.jar文件和HelloXidian.smali文件放到同一个位置上(这里假设为Desktop)
打开命令提示符窗口
输入命令: java -jar smali.jar a -o HelloXidian.dex HelloXidian.smali
编译成功,出现.smali文件编译后的文件.dex文件
执行.dex文件
第一步:打开Android Vitual Device Manager
第二步:将.dex文件放进安卓模拟器环境
adb push HelloXidian.dex /data/local
第三步:执行.dex文件
adb shell dalvikvm –cp /data/local/HelloXidian.dex HelloXidian
(注意这里最后的java原文件名HelloXidian要与文件中类名同名,否则在编译时不会出错,到了这里才会出错)
此时命令输出:HelloXidian