2013-01-25 40 views
1

也許這個問題聽起來可能對Java用戶來說很愚蠢。對不起,我是一個noob。Android和鏈接庫

我在想如何在運行期間在Android系統中加載庫。

比方說,我有一個超級簡單的android應用程序,只調用位於javax.net.ssl包中的函數。

包含javax.net.ssl東西的jar(dex)會插入到apk中(將它變成靜態庫)? 或者在運行期間,Dalvik VM會鏈接到android機器上安裝的jar(或dex)文件? 或者只是Dalvik VM被編譯爲包含每個javax自身?

預先感謝

回答

2

它們是在運行時動態通過加載存儲在設備上的附加優化DEX代碼鏈接的效果。

實際上,對於許多組件,系統啓動時會發生一次,其中包含的進程和虛擬機將成爲每個應用程序的繼承,只讀訪問已存在內存中的共享副本。

本地庫的工作方式大致相同,只有在虛擬機級別以下的進程中,鏈接發生在進程本身中。

+0

因此......你是否告訴我每個手機上都有一個android.jar庫,每次手機開機時它都會被VM加載? –

+0

有效的是,但它並沒有被稱爲。它具有真正的實現,而SDK中的android.jar具有不透明的假貨來指導工具鏈。 –

+0

這個真正的實現嵌入到達爾維克編譯的代碼中嗎?還是在Dalvik啓動階段從文件加載?我在問這個,因爲我有疑問。如果後面的文件存在,如果我能找到並修改它是惡意的? (例如,我可以更改javax.net.ssl例程並使它們轉儲DECRYPTED SSL連接的數據) –