簡(jiǎn)單來(lái)講:
成都創(chuàng)新互聯(lián)公司成立與2013年,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元門(mén)源做網(wǎng)站,已為上家服務(wù),為門(mén)源各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
靜態(tài)庫(kù)是在連接階段直接拷貝到代碼中使用的,而共享庫(kù)是由加載器加載到內(nèi)存,在運(yùn)行時(shí)使用的。
編譯出來(lái)的靜態(tài)庫(kù)(這里指jar包)里每個(gè)java文件對(duì)應(yīng)的class文件都單獨(dú)存在,可以直接導(dǎo)入Eclipse等IDE使用
而編譯出來(lái)的共享庫(kù)(jar包),內(nèi)部是Android字節(jié)碼Dex格式的文件,一般無(wú)法導(dǎo)入Eclipse等IDE使用。Android.mk中由BUILD_JAVA_LIBRARY指定生成共享BUILD_STATIC_JAVA_LIBRARY指定生成靜態(tài)庫(kù)。
屬于
靜態(tài)庫(kù)全稱(chēng)靜態(tài)鏈接庫(kù),動(dòng)態(tài)庫(kù)全稱(chēng)動(dòng)態(tài)鏈接庫(kù),看到全稱(chēng)就知道什么意思了吧?也就是說(shuō)在鏈接的時(shí)候才會(huì)用到的庫(kù),只有C/C++、OC語(yǔ)言才會(huì)有鏈接過(guò)程,Java沒(méi)有。
在Android中說(shuō)到靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù),一般說(shuō)的都是C/C++代碼,我們知道在android中是通過(guò)jni技術(shù)訪問(wèn)到C代碼的,我們會(huì)把C/C++打包成so文件,這個(gè)就是動(dòng)態(tài)庫(kù)(共享庫(kù))。如果我們想要使用的C庫(kù)是.a形式的靜態(tài)庫(kù)時(shí),我們要把.a包裝成so庫(kù),具體網(wǎng)上有方法。
個(gè)人感覺(jué)在java語(yǔ)言中討論靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)就是個(gè)偽概念,java是的編譯結(jié)果是字節(jié)碼文件,不是二進(jìn)制文件,而且沒(méi)有鏈接的過(guò)程,jvm在解釋執(zhí)行java代碼的時(shí)候調(diào)用C++代碼只能是動(dòng)態(tài)的。
在C++和object C開(kāi)發(fā)中,用編譯鏈接的過(guò)程,靜態(tài)庫(kù)在鏈接過(guò)程中,會(huì)和自己寫(xiě)的源代碼打到一塊,多個(gè)程序多個(gè)靜態(tài)庫(kù)。動(dòng)態(tài)庫(kù)不會(huì)打到一塊,如果有共享情況的話,系統(tǒng)只會(huì)加載一次。
OC的代碼處理過(guò)程是很復(fù)雜的,有預(yù)處理、編譯、鏈接過(guò)程,預(yù)處理就是處理宏什么的,編譯這個(gè)過(guò)程就很復(fù)雜了,有編譯前端和編譯后端,編譯稱(chēng)機(jī)器碼(中間還會(huì)有匯編的過(guò)程),鏈接就是鏈接動(dòng)態(tài)庫(kù)或者靜態(tài)庫(kù)。
Android(java)代碼處理過(guò)程就很簡(jiǎn)單啦,畢竟是運(yùn)行在虛擬機(jī)上的。沒(méi)有所謂的預(yù)處理,直接編譯,這里的編譯也就是把java代碼轉(zhuǎn)化成字節(jié)碼,這個(gè)編譯和OC中的編譯可不是一個(gè)概念,只不過(guò)也這么叫而已。后續(xù)Aandroid還會(huì)用dex工具把.class打包成.dex,不同的VM模式(5.0以后都是ART)會(huì)對(duì).dex進(jìn)行不同的優(yōu)化,具體看Android 編譯到運(yùn)行APK過(guò)程總結(jié)。需要提一下的是,ART采用AOT和JIT技術(shù),在安裝或者運(yùn)行的時(shí)候,會(huì)把字節(jié)碼轉(zhuǎn)化成機(jī)器碼,這個(gè)機(jī)器碼也會(huì)受VM控制的,具體看Android之Dalvik 、ART
C/C++、Object C屬于編譯型語(yǔ)言,這是毋庸置疑的,因?yàn)樗鼈兌紩?huì)在生成安裝包之前編譯成機(jī)器碼。
關(guān)于編譯靜態(tài)庫(kù):
android.mk和xxx.cpp放在新文件夾里:
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \xxx.cpp
LOCAL_MODULE:= libx
include $(BUILD_STATIC_LIBRARY)
生成靜態(tài)庫(kù)libx.a文件
關(guān)于鏈接靜態(tài)庫(kù):
有兩種方法:
1、把libx.a文件放在android.mk同一目錄下,添加:
LOCAL_PREBUILT_LIBS += libx.a
2、同上,添加:
include $(CLEAR_VARS)LOCAL_MODULE := libxLOCAL_SRC_FILES := libx.ainclude $(PREBUILT_STATIC_LIBRARY)LOCAL_STATIC_LIBRARIES += libx
貌似第二種是NDK里比較常見(jiàn),第一種在其他的android.mk里比較常見(jiàn)。
關(guān)于編譯靜態(tài)庫(kù):
android.mk和xxx.cpp放在新文件夾里:
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \xxx.cpp
LOCAL_MODULE:= libx
include $(BUILD_STATIC_LIBRARY)
生成靜態(tài)庫(kù)libx.a文件
文章名稱(chēng):靜態(tài)庫(kù)android,靜態(tài)庫(kù)的創(chuàng)建與使用
本文URL:http://jinyejixie.com/article30/dsseepo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站制作、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)