smali文件的编译以及执行

编译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

猜你喜欢

转载自blog.csdn.net/KONIA_/article/details/83154334