smali檔案的編譯以及執行
阿新 • • 發佈:2019-01-06
編譯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