Android客戶端.So 精簡(jiǎn)策略

/**
 * Created by chenchangjun on 17/10/27.
 */

1..So 理論基礎(chǔ)

首先介紹一下 目前所有手機(jī)上 .So 的指令集

Android系統(tǒng)目前支持以下七種不同的CPU架構(gòu)货裹,每一種都關(guān)聯(lián)著一個(gè)相應(yīng)的ABI。而架構(gòu)上對(duì)應(yīng)的指令集是以下幾種

  • Intel 64 指令集在 x86基礎(chǔ)上擴(kuò)展的(x86指令集有兩種CPU位屋吨,既有32位的,也有64位的.)
  • armabi 是針對(duì)舊的或者普通的ARM v5 CPU.
  • armabi-v7a 是針對(duì)ARM v7 CPU (是針對(duì)有浮點(diǎn)運(yùn)算或高級(jí)擴(kuò)展功能的arm cpu).
  • arm64-v8a 是針對(duì)最新的 ARM v8a CPU的(就是在MIPS64架構(gòu)上增加了ARMv7).

安卓這些固定平臺(tái)的應(yīng)用通常都編譯成ARM處理器的程序山宾,不全都會(huì)編譯成Intel或者M(jìn)IPS處理器的程序至扰。

為了解決這個(gè)問(wèn)題,Intel和MIPS要使用特殊的轉(zhuǎn)換軟件把ARM的指令轉(zhuǎn)換成他們處理器使用的指令资锰。這當(dāng)然是會(huì)降低性能的敢课。

2.項(xiàng)目問(wèn)題解決

2.1 思路分析

目前項(xiàng)目中的jniLib是這樣的,相當(dāng)冗余.

image.png

思路是這樣的

  1. armabi指令集是全arm平臺(tái)(包括armV7 armv8,以及x86,x86_64),都兼容的 指令集.
  1. armabi-v7a 是針對(duì)有浮點(diǎn)運(yùn)算或高級(jí)擴(kuò)展功能的arm cpu,也就是armabi的高性能版本. Android 5.0+同時(shí)支持32位與64位ABI的.so. 有arm64-v8a就用,沒(méi)有就fallback到armeabi-v7a或armeabi.
  1. arm64-v8a 64位指令集,運(yùn)行在64位手機(jī)cpu上,目前主流cpu都已經(jīng)是64位.

所以說(shuō):

為了盡量兼容市面所有手機(jī)類(lèi)型, 盡可能減少crash幾率. 所以,
ARM7, ARM8設(shè)備能夠向下兼容ARM5的SO,也就是說(shuō)只打包armabi下的so即可

2.2 調(diào)研第三方lib庫(kù)

為了驗(yàn)證這個(gè)導(dǎo)論, 我反編譯了一些流行app文件.

反編譯了 微博 的jniLib中的 文件.

只用了 armabi的兼容包.

image.png

反編譯 微信

他們只用了armabi的兼容包,但是里面有_v7.so后綴的 高性能包,提高性能.

image.png

反編譯 淘寶

只用了 armabi的兼容包.

image.png

第三方總結(jié)

這里, 都是用了 armeabi包下的.so .

不同的是, 有的他們?cè)谶@個(gè)文件夾下的.so直接做了v7兼容包, 有的則可能選擇了插件加載.so的方式.

相同的是, 都是只打包armeabi,提高最大的兼容性,并且減少apk體積.

3.實(shí)現(xiàn),測(cè)試

3.1 代碼實(shí)現(xiàn)

為了確保不出現(xiàn)問(wèn)題(比如gradle引用第三方可能存在so),保留可選擇性的打包.我沒(méi)有刪掉其他cpu指令集,而是用代碼選擇性編譯,只保留armeabi進(jìn)行編譯.

//'armeabi-v7a' // , ‘a(chǎn)rm64-v8a’, ‘x86’, ‘x86_64’
        ndk {
            abiFilters 'armeabi'
        }
        

3.2 結(jié)果對(duì)比

image.png

4. 總結(jié)

目前,可以只編譯armeabi下的so,因?yàn)?code>armeabi兼容所有的cpu架構(gòu).
理論上行得通, 主流app也都是這么做的.
至于,性能問(wèn)題,so包影響程度不超過(guò)15%,性能問(wèn)題 最大的還是在手機(jī)質(zhì)量和運(yùn)行內(nèi)存..........

5. 后期方向

5.1 只保留armabi-v7a或者arm64-v8a

隨著Android 版本的提高(Android5.0以后的版本支持v7和v8指令集), 手機(jī)性能的提高(不管高通,麒麟還是聯(lián)發(fā)科,目前主流cpu都是64位處理器.

也就是說(shuō)支持v7和v8指令集.越來(lái)越?jīng)]必要做ARM5和X86的支持了绷杜,以后就更沒(méi)必要直秆。

5.2 采用插件化 加載.so 包

我們可以采用 插件化加載.so .

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鞭盟,隨后出現(xiàn)的幾起案子圾结,更是在濱河造成了極大的恐慌,老刑警劉巖齿诉,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筝野,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡粤剧,警方通過(guò)查閱死者的電腦和手機(jī)歇竟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)抵恋,“玉大人焕议,你說(shuō)我怎么就攤上這事』」兀” “怎么了盅安?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵唤锉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我宽堆,道長(zhǎng)腌紧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任畜隶,我火速辦了婚禮,結(jié)果婚禮上号胚,老公的妹妹穿的比我還像新娘籽慢。我一直安慰自己,他們只是感情好猫胁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布箱亿。 她就那樣靜靜地躺著,像睡著了一般弃秆。 火紅的嫁衣襯著肌膚如雪届惋。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,763評(píng)論 1 307
  • 那天菠赚,我揣著相機(jī)與錄音脑豹,去河邊找鬼。 笑死衡查,一個(gè)胖子當(dāng)著我的面吹牛瘩欺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拌牲,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼俱饿,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了塌忽?” 一聲冷哼從身側(cè)響起拍埠,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎土居,沒(méi)想到半個(gè)月后枣购,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡装盯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年坷虑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片埂奈。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡迄损,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出账磺,到底是詐尸還是另有隱情芹敌,我是刑警寧澤痊远,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站氏捞,受9級(jí)特大地震影響碧聪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜液茎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一逞姿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧捆等,春花似錦滞造、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至明郭,卻和暖如春买窟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背薯定。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工始绍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人沉唠。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓疆虚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親满葛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子径簿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容