安卓,不同SDK,armeabi 與arm86沖突解決

(原創(chuàng)文章,轉(zhuǎn)載請大家注明出處,謝謝)

做Android開發(fā)的同學都知道,

不管是Android Studio還是Eclipse ,在libs文件夾下面

根據(jù)我們的需要,可以產(chǎn)生armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64

這些文件夾,并在里面存放.so文件。這些神秘的文件實際上都是abi,Android系統(tǒng)上,每一個CPU架構(gòu)對應(yīng)一個ABI,大家可以搜下相關(guān)的資料,研究下這塊的具體原理。我今天分享的是另一個東西。

事情是這樣的,最近app成功集成了阿里百川sdk,然后,只要編譯,那么百度sdk相關(guān)代碼就閃退了!

日—— 了—— 狗——了!

集成之前,app沒什么問題,集成之后,只要啟動app,就直接閃退,因為百度sdk在application里面有

相關(guān)的初始化,而現(xiàn)在初始化的代碼找不到了!經(jīng)過分析,本質(zhì)上是百度放在libs下面的.so文件找不到了。

為什么呢? 因為編譯阿里百川之后,它會自動在libs生成

armeabi,armeabi-v7a,x86,arm64-v8a,x86_64五個文件夾,并分別放入libsgmain.so

但是app在集成阿里百川之前,還集成了百度地圖、訊飛、友盟、微信、微博等等,然而所有這些sdk的.so文件,都統(tǒng)一放在了armeabi文件里面;也就是說,app里面沒有存放其他4個文件夾(armeabi-v7a,x86,arm64-v8a,x86_64)的so文件。

那么問題就來了,一旦編譯成功,那么app就會crash,比如微信的libmsc.so只存在armeabi里面, 而阿里百川sdk生成的4個文件夾里面并沒有l(wèi)ibmsc.so, 那么如果程序調(diào)用到這個文件夾,因為找不到這個文件,就會直接崩潰。

表述能力有限,希望大家能理解,只有抱歉了。

那么如何解決這個問題呢? 有2中方法

第一種,手動新建這5個文件夾,并在每個文件夾里面都放入.so文件,就是說百度要去開發(fā)者平臺,

下載sdk,找到這5種.so文件,然后分別復制到app到libs相對應(yīng)的文件下面。當然微信也是,微博也是。

這樣是能解決問題的,但是感覺挺累。

第二種,通過代碼限制阿里百川,只讓它生成app之前就有的armeabi文件夾,那么就不會有這種問題

在build.gradle文件里面,具體代碼如下,


sourceSets { ?

? ? ?main {

? ? ? ?jniLibs.srcDirs:['libs']?

? ? }}

? android {

? ? ? splits {

abi {

?enable true

?reset()

?include 'armeabi'

?universalApk false

? ?}

? }

? }


最后,問題圓滿解決。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容