1. 程式人生 > >smali檔案的編譯以及執行

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