- 靜態(tài)庫(kù)
- 靜態(tài)庫(kù)的介紹
- .a靜態(tài)庫(kù)的制作以及測(cè)試
- 靜態(tài)庫(kù)的架構(gòu)問(wèn)題
- .framework靜態(tài)庫(kù)的制作以及測(cè)試
- 邊開發(fā)邊制作靜態(tài)庫(kù)
簡(jiǎn)介
- 什么是庫(kù)
庫(kù)是程序代碼的集合,是共享代碼的一種方式 - 根據(jù)源代碼的公開情況,庫(kù)可以分為兩類
- 開源庫(kù)
- 公開源代碼,能看到具體的實(shí)現(xiàn)
- 閉源庫(kù):
- 不公開源代碼,是經(jīng)過(guò)編譯后的二進(jìn)制文件,看不到具體的實(shí)現(xiàn)
- 開源庫(kù)
- 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的存在形式:
- 靜態(tài)庫(kù): .a和. framework
- 動(dòng)態(tài)庫(kù):.dylib和. framework
- 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)在使用上的區(qū)別
- 靜態(tài)庫(kù):鏈接時(shí),靜態(tài)庫(kù)會(huì)被完整地復(fù)制到可執(zhí)行地文件中,被多次使用就有多次冗余拷貝
- 動(dòng)態(tài)庫(kù):鏈接時(shí)不復(fù)制,程序運(yùn)行時(shí)由系統(tǒng)動(dòng)態(tài)加載到內(nèi)存,供程序調(diào)用,系統(tǒng)只加載一次,多個(gè)程序共用,節(jié)省
內(nèi)存 - 注意:項(xiàng)目中如果使用了自制的動(dòng)態(tài)庫(kù),不能上傳到AppStore
- 應(yīng)用場(chǎng)景
- 靜態(tài)庫(kù)的應(yīng)用場(chǎng)景(一)
- 百度地圖想開發(fā)者在應(yīng)用程序中集成百度地圖
- 但是百度不想公開自己的技術(shù)實(shí)現(xiàn),如何完成呢?
- 百度將自己的核心代碼編譯成靜態(tài)庫(kù),對(duì)外暴露統(tǒng)一的接口
- 開發(fā)者集成靜態(tài)庫(kù),并且調(diào)用靜態(tài)庫(kù)即可集成
- 靜態(tài)庫(kù)的應(yīng)用場(chǎng)景(二)
-
公司項(xiàng)目開發(fā)的一部分代碼為核心代碼
1.png
-
- 靜態(tài)庫(kù)的應(yīng)用場(chǎng)景(一)
編譯.a/.framework靜態(tài)庫(kù)
-
創(chuàng)建項(xiàng)目的時(shí),選擇Framework&Library
2.png- 創(chuàng)建.a靜態(tài)庫(kù)
3.png
如圖所示建一個(gè)文件,然后實(shí)現(xiàn).h.m,當(dāng)當(dāng)前是在模擬器上下是command+b在products文件夾生成的.a是在模擬器上使用的,當(dāng)選的是真機(jī),command+b在products文件夾生成的.a是在真機(jī)上使用的
4.png
點(diǎn)擊加號(hào)把所有暴露的文件添加進(jìn)去再command+b,到此靜態(tài)庫(kù)創(chuàng)建完成??梢苑诺焦こ汤镞M(jìn)行使用了。
5.png
show in find 查看當(dāng)前的庫(kù),使用時(shí)把庫(kù)和暴露的接口文件拖進(jìn)去,然后調(diào)用即可
- 創(chuàng)建.a靜態(tài)庫(kù)
靜態(tài)庫(kù)的架構(gòu)
- 設(shè)備的cpu架構(gòu)
- 不同的設(shè)備使用的cpu是不同的
- cpu的不同造成使用的cpu架構(gòu)(指令集)不同
- 靜態(tài)庫(kù)有其支持的cpu架構(gòu)
- 如果靜態(tài)庫(kù)在不支持的cpu架構(gòu)上運(yùn)行就會(huì)報(bào)錯(cuò)
- 模擬器使用的cpu架構(gòu)
- iphone4s - iphone5:i386
- iphone5s - iphone6splus:x86_64
- 真機(jī)使用的cpu架構(gòu)
- iphone3gs - iphone4s:armv7
- iphone5 - iphone5c: armv7s
- iphone5s - iphone6plus:arm64
- 唯一特殊:只支持armv7的靜態(tài)庫(kù)可以在armv7s上正常運(yùn)行
- 查看靜態(tài)庫(kù)支持的架構(gòu)
-
進(jìn)入靜態(tài)庫(kù)所在的文件夾,然后執(zhí)行l(wèi)ipo -info 靜態(tài)庫(kù)的名字
7.png
-
-
假如當(dāng)前的只能運(yùn)行在模擬器或真機(jī)靜態(tài)庫(kù)不能支持所有設(shè)備的架構(gòu),可以采用如下方法:
8.png - 合并靜態(tài)庫(kù)(可支持真機(jī)和模擬器)
-
lipo -create 靜態(tài)庫(kù)1 靜態(tài)庫(kù)2 -output合并的靜態(tài)庫(kù)
9.png
-
提示:當(dāng)項(xiàng)目上線時(shí)推薦使用只支持真機(jī)的靜態(tài)庫(kù),如果兩者都支持,那樣會(huì)造成包太大了
(歡迎大家對(duì)不合適的地方進(jìn)行指正,看完覺(jué)得有幫到你給點(diǎn)個(gè)贊??吧)







