Android 應(yīng)用push ,so無法加載

作者君主要做SDK開發(fā)殴玛,對接一些廠商或運行商的普通應(yīng)用或系統(tǒng)應(yīng)用捅膘。
當(dāng)對接系統(tǒng)應(yīng)用時,由于系統(tǒng)應(yīng)用是由于覆蓋機型比較廣滚粟,會碰到Android多個版本機型寻仗,有的可能出現(xiàn)so找不到的問題。

普通應(yīng)用

普通install安裝apk的方式凡壤,apk會被安裝在 /data/app 目錄下署尤,那么So則會被映射到/data/app/項目目錄下/lib。

系統(tǒng)應(yīng)用

1.apk采用預(yù)裝的方式:

首次安裝只能通過直接push到/system/app/下的方式來安裝亚侠,而不是如普通應(yīng)用般采取install的方式曹体。

2.系統(tǒng)應(yīng)用升級:

android在開機掃描應(yīng)用的時候會對 相應(yīng)目錄進行掃描,如果發(fā)現(xiàn) data/app目錄下 存在和系統(tǒng)應(yīng)用同包名的應(yīng)用盖奈,并且版本號比系統(tǒng)應(yīng)用的版本號更高則構(gòu)成升級關(guān)系混坞,校驗簽名等安全驗證通過。此時data/app下的這個應(yīng)用就是系統(tǒng)應(yīng)用

3.so加載

而push到系統(tǒng)目錄下如system/app/....钢坦,則會優(yōu)先尋找system/lib(lib64)目錄下的so究孕,由于so
不會自動釋放到該目錄下,所以需要手動push到該路徑下爹凹。

4.Android版本適配的問題:
  • 4.4(含)及以下系統(tǒng):push到Android系統(tǒng)的/system/lib目錄
  • 5.0(含)及以上系統(tǒng):push到Android 系統(tǒng)的 /system/app/應(yīng)用部署文件夾/lib/系統(tǒng)架構(gòu)/目錄中進行集成厨诸;不推薦這兩個so文件拷貝到/system/lib或者/system/lib64目錄中,已知在Android N上禾酱。

PackageManager掃描so版本出錯

1.背景

作者君還遇到過這樣的問題微酬,有時候為了減少包的大小或者其他,不會把所有ABI類型的so都放進目錄颤陶,另外so的提供者團隊沒有提供64的so(哈哈颗管,如果提供了,下面的問題直接就沒有了滓走,那為什么還拿出來說呢垦江,主要是簡單地了解一下系統(tǒng)底層的一些基本原理,感興趣的可以看下一下~~)

2.問題:

機型類型是64位的搅方,其他apk僅提供了64位的so比吭。而某個apk由于只集成了32位so, install安裝是正常的姨涡,但是把apk通過push到/system/app下辱魁,so放到/system/lib下則報如下錯誤:

abcdefg-xxx.so is 32-bit instead of 64-bit

32位機器上當(dāng)然是正常的吱肌。

一般情況下吼鳞,64位的操作系統(tǒng)可以兼容32位的庫文件氢橙,所以僅含有32位的
apk正常情況下也可以在64的機器上跑起來。

3.原因:

那么為什么會出錯呢?首先是系統(tǒng)級應(yīng)用瓢剿,需要理解Android系統(tǒng)的原理(當(dāng)然啦岁诉,也許廠商定制了一番,那則另一回事跋选。):
系統(tǒng)有幾個屬性,其中app.info.primaryCpuAbi這個值用來決定apk關(guān)聯(lián)ABI類型哗蜈。而PackageManager會對這個值有所影響前标。比如:通過apk包里包含的so庫的架構(gòu)來決定app的primaryCpuAbi的值。

1.系統(tǒng)apk或者普通的apk, 如果統(tǒng)的 /system/app/應(yīng)用部署文件夾/lib/系統(tǒng)架構(gòu)/目錄下so文件存在距潘,則以此so文件來確定primaryCpuAbi的值
2.如果是系統(tǒng)apk, 包里又不存在.so文件炼列,就會進一步根據(jù)/system/app/項目包名/lib和/system/app/項目包名/lib64是否存在,來確定它的primaryCpuAbi值

另外:
如果機器里有64位的apk音比,且PackageManager掃描到第一正好是這個apk俭尖,PackageManager調(diào)整所有apk要加載的都是64位的so。不再去加載32位的so洞翩,那么只含32位so的apk就會跑出異常稽犁。反之,則64位的apk正常運行骚亿,32位的則出錯已亥。

尾語

作者君能力有限,如有錯處来屠,請書友們指導(dǎo)虑椎,作者君會第一時間修改。
一起學(xué)習(xí)一起進步?( ′???` )比心

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俱笛,一起剝皮案震驚了整個濱河市捆姜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌迎膜,老刑警劉巖泥技,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異星虹,居然都是意外死亡零抬,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門宽涌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來平夜,“玉大人,你說我怎么就攤上這事卸亮『龆剩” “怎么了?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長段直。 經(jīng)常有香客問我吃溅,道長,這世上最難降的妖魔是什么鸯檬? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任决侈,我火速辦了婚禮,結(jié)果婚禮上喧务,老公的妹妹穿的比我還像新娘赖歌。我一直安慰自己,他們只是感情好功茴,可當(dāng)我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布庐冯。 她就那樣靜靜地躺著,像睡著了一般坎穿。 火紅的嫁衣襯著肌膚如雪展父。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天玲昧,我揣著相機與錄音栖茉,去河邊找鬼。 笑死孵延,一個胖子當(dāng)著我的面吹牛衡载,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隙袁,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼痰娱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了菩收?” 一聲冷哼從身側(cè)響起梨睁,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娜饵,沒想到半個月后坡贺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡箱舞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年遍坟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晴股。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡愿伴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出电湘,到底是詐尸還是另有隱情隔节,我是刑警寧澤鹅经,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布,位于F島的核電站怎诫,受9級特大地震影響瘾晃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜幻妓,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一蹦误、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肉津,春花似錦胖缤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狗唉。三九已至初烘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間分俯,已是汗流浹背肾筐。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缸剪,地道東北人吗铐。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像杏节,于是被迫代替她去往敵國和親唬渗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,576評論 2 349

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