估計你得到的是java虛擬機指令,因為.class文件與java源代碼不是一一對應的,但與虛擬機指令卻是一一對應的,就像exe文件中的機器指令與匯編指令是一一對應的,要看懂這些代碼可以參考java虛擬機指令集
『貳』 關於android反編譯軟體jd-gui,反編譯出的都是.class文件,怎樣才能得到.java文件
jd-gui就是反編譯成JAVA的。
點file 點Save all sources將jar包保存為JAVA文件。
『叄』 在線等:安卓反編譯解讀代碼時遇到的問題,JAVA代碼問題
反編譯出來的代碼和源代碼是有出入的,基本能讀懂就好了,裡面有錯誤也是正常的
『肆』 安卓系統中如何為程序反編譯JAVA適用環境
Android_complier這種反編譯工具直接可以把apk包反編譯(產生的文件夾里會有classes.dex.dex2jar.jar這個文件,用jd-gui這個工具查看代碼即可),如果沒有的話用dex2jar工具的命令在命令行里把編譯後的文件夾里的classes.dex文件編成classes.dex.dex2jar.jar,注意寫正確classes.dex的路徑
『伍』 有的安卓程序反編譯後是samli文件,這是程序員直接用smali語言寫的,還是是用java寫的
您好,
1、原始類型:
v void 只能用於返回值類型
Z boolean
B byte
S short
C char
I int
J long(64位)
F float
D double(64位)
對象類型:
Lpackage/name/ObjectName相當於java中的package.name.ObjectName解釋如下:
L:表示這是一個對象類型
package/name:該對象所在的包
;:表示對象名稱的結束
數組的表示形式:
[I :表示一個整形的一維數組,相當於java的int[];
對於多維數組,只要增加[ 就行了,[[I = int[][];註:每一維最多255個;
對象數組的表示形式:
[Ljava/lang/String 表示一個String的對象數組;
方法的表示形式:
Lpackage/name/ObjectName;——>methodName(III)Z 詳解如下:
Lpackage/name/ObjectName 表示類型
methodName 表示方法名
欄位的表示形式:
Lpackage/name/ObjectName;——>FieldName:Ljava/lang/String;
即表示: 包名,欄位名和各欄位類型
方法的傳參:
當一個方法被調用的時候,方法的參數被置於最後N個寄存器中;
例如,一個方法有2個參數,5個寄存器(v0~v4)
那麼,參數將置於最後2個寄存器(v3和v4)
非靜態方法中的第一個參數總是調用該方法的對象;
說明:對於靜態方法除了沒有隱含的this參數外,其他都一樣
寄存器的命名方式:
V命名
P命名 第一個寄存器就是方法中的第一個參數寄存器
比較:使用P命名是為了防止以後如果在方法中增加寄存器,需要對參數寄存器重新進行編號的缺點:
特別說明一下:Long和Double類型是64位的,需要2個寄存器
例如:對於非靜態方法
LMyObject——>myMethod(IJZ)V;
有4個參數:LMyObject,int,long,bool; 需要5個寄存器來存儲參數;
P0 this
P1 I (int)
P2,P3 J (long)
P4 Z(bool)
『陸』 android反編譯後代碼中的資源全是數字,又找不到R.java怎麼辦
這串數字是資源的ID。不是名稱。