Android培訓班 66 dex檔案開啟流程

2021-08-31 16:40:06 字數 1573 閱讀 2275

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

下面來分析這個函式**,如下:

intdexzippreparchive(int fd, const char* debugfilename, ziparchive*parchive)

if (map.length < keocdlen)

這段**對映檔案資料到記憶體。

if (!parseziparchive(parchive, &map))

這段**是分析zip檔案。

/* success */

err = 0;

syscopymap(&parchive->mmap, &map);

map.addr = null;

這段**拷貝到對映位置。

bail:

if (err != 0)

dexzipclosearchive(parchive);

if (map.addr != null)

sysreleaseshmem(&map);

return err;

}函式dexzippreparchive的處理,主要就是先儲存檔案控制代碼,然後建立檔案記憶體對映,呼叫parseziparchive函式來分析zip的所有入口點,並記錄到相應的hash表裡,最後呼叫syscopymap函式來儲存到zip檔案物件結構裡。

由上面分析可知,dex檔案是壓縮成zip檔案,這樣可以減少占用空間。dex檔案在系統裡是怎麼樣開啟的過程呢?其它經過下面的過程:

1)系統初始化虛擬機器時,會初始化原始方法gdvmnativemethodset集合。

2)在原始方法集合裡有乙個函式集合dvm_dalvik_system_dexfile,註冊它為ldalvik/system/dexfile串,當虛擬機器呼叫dexfile相關函式時,就會呼叫這些函式來處理dex檔案。

3)在處理dex檔案時,會呼叫函式集合:dvm_dalvik_system_dexfile,這個函式集合裡,主要有如下函式:

constdalviknativemethod dvm_dalvik_system_dexfile = ,,,

,,,};

opendexfile方法對應的原始函式是dalvik_dalvik_system_dexfile_opendexfile,它是開啟dex檔案函式。

closedexfile方法對應的原始函式是dalvik_dalvik_system_dexfile_closedexfile,它是關閉已經開啟的dex檔案函式。

4)在dalvik_dalvik_system_dexfile_opendexfile函式裡,呼叫函式dvmjarfileopen開啟jar或者zip壓縮的檔案。

5)在dvmjarfileopen函式裡,呼叫dexzipopenarchive來處理zip檔案,呼叫dexzipfindentry函式讀取zip解壓的檔案,呼叫dvmdexfileopenfromfd函式讀取相應的類資料到記憶體,並返回給虛擬機器。

給我老師的人工智慧教程打call!

學生骨幹培訓班

對於我們搞計算機的人來說,談點技術,我們還說的過去,嘿嘿,其實,現在我們的技術也不怎麼樣。那在做學生工作和當學生幹部方面,確實我們差的還很多啊。最近2天參加了乙個學生骨幹培訓班,叫 理工才俊 學生骨幹培訓,o o哈哈 咋一聽這個名字,以為去那兒的人都很了不起,其實,確實nb的人n多,但是肯定的除了我...

北京物聯網培訓班

據了解,當前在北京從事物聯網培訓的機構並不多,主要原因是大多數機構對這塊技術還不成熟,但隨著智慧型硬體的興起,逐漸讓大家刮目相看。覺得這種技術會在未來十年在行業中能有一席之地。所以找物聯網培訓班不在是新鮮事。北京最早從事物聯網培訓的機構 華清遠見物聯網學院。早在2012年就開始規劃物聯網相關的職業教...

Android培訓班 95 核心解壓過程8

核心在上面處理完關閉中斷,並且確認進入系統模式後,就需要解決第乙個問題 解決自己到底在那裡執行的問題。這個問題,就好比乙個人在大海浬航行而沒有指南針,根本找不到北在那裡,急切地想知道方向在那裡。如果在白天還可以靠大陽就知道了方向,在晚上可以靠北斗星,在核心裡是否也有這樣的大自然的指示呢?在核心裡沒有...