分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!
下面來分析這個函式**,如下:
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
核心在上面處理完關閉中斷,並且確認進入系統模式後,就需要解決第乙個問題 解決自己到底在那裡執行的問題。這個問題,就好比乙個人在大海浬航行而沒有指南針,根本找不到北在那裡,急切地想知道方向在那裡。如果在白天還可以靠大陽就知道了方向,在晚上可以靠北斗星,在核心裡是否也有這樣的大自然的指示呢?在核心裡沒有...