日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java class dex_class文件与dex文件分析

發布時間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java class dex_class文件与dex文件分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.什么是class文件

class文件就是可以被JVM識別,加載,運行的一種文件格式。一般情況下,它可以由java代碼編譯執行后得到,但是這并不是一定的,像kotlin,scala,python,ruby等JVM語言都可以通過編譯得到class文件。

2.如何得到class文件

上面已經講了,得到class文件不一定要使用java。這里我們只討論使用java去生成class文件。一般情況下,我們都是通過Ecplise或者Intellij這樣的IDE開發工具去build工程,當然也可以用個JDK中的javac命令去編譯java文件。當我們一開始接觸java時,老師也是這么教的。這里回顧下,前提pc已經有java環境了(安裝了jdk,配置了環境變量)

寫個簡單java代碼文件

public class HelloClass{ public static void main(String[] args){ System.out.println("Hello Class!"); } }

然后進入終端,通過javac命令編譯這個文件

javac -target 1.6 -source 1.6 HelloClass.java

這是你就會在當前目錄下看到一個HelloClass.class的文件,這就是我們的目標。就這么簡單...

3.class文件的結構

class文件記錄著整一個類的所有信息,是所有!

class文件結構的3個特點:

是一種8位字節的二進制流文件

各個數據按順序緊密的排列,無間隙

每個類或者借口都單獨占據一個class文件

QQ截圖20170610093949.png

上面就是完整的class文件的結構,是不是看暈了...

magic 加密字段

minor_version 支持最低版本的jdk

major_version 編譯使用的jdk版本

constant_pool_count 常量池的數量

cp_info constant_pool 常量池的結構體,數量不定

access_flags 訪問級別

this_class 當前類

super_class 父類

interfaces_count 類實現接口的數量

fields_count 類成員變量的數量

methods_count 類方法的數量

method_info methods 類方法的結構體

attributes_count 類屬性的數量

attribute_info attributes 類屬性的結構體

4.什么dex文件

dex文件就是可以被android虛擬機dvm識別,加載,運行的文件格式。

5.如何生成dex文件

一般情況下,我們都是通過IDE的build工具生成,當然我們也可以手動編譯生成。所需要用到的命令在android sdk路徑下的build-tools\25.0.2(任意版本)\dx,我們現在的目標是要將HelloClass.class這個文件打包成dex文件

dx --dex --output HelloClass.dex HelloClass.class

然后,你就可以在當前目錄下看到一個叫HelloClass.dex的文件,so easy!

6.運行dex文件

因為dex文件是運行在android dalvik虛擬機上的,所以我們要先將dex文件push到手機中,具體步驟如下:

adb push HelloClass.dex /sdcard/ adb shell 127|root@vbox86p:/sdcard # dalvikvm -cp HelloClass.dex HelloClass

然后就能看到Hello Class!的打印了,跟我們在pc上運行一模一樣

7.dex文件的結構

一種8位字節的二進制流文件

各個數據按順序緊密排列,無間隙

整個應用所有java源文件都放在一個dex文件中(一般情況下)

Paste_Image.png

上面就是完整的dex文件的結構,我們可以把dex的文件結構分成3個區。

第一個區是header,包括header_item dex_header這個結構體,第二個區是索引區,包括string_id_list dex_string_ids(字符串索引),type_id_list dex_type_ids(類型索引),proto_id_list dex_proto_ids(方法原型索引),field_id_list dex_field_ids(域索引),method_id_list dex_method_ids(方法索引),第三個區是數據區,包括

class_def_item_list dex_class_defs(類的定義),data(圖中的value),link_data(so)

8.class文件和dex文件的對比#

兩者本質上是一致的,dex文件也是從class文件演變而來的,個人感覺像是打包一樣,當然不止如此。dex文件比class文件的優勢是去除了class文件結構中冗余的設計,更加精簡,適合于運用在移動端。

總結

以上是生活随笔為你收集整理的java class dex_class文件与dex文件分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。