Android關(guān)于libs,jniLibs庫(kù)的基本使用說(shuō)明及沖突解決

最近在開(kāi)發(fā)中遇到了一個(gè)問(wèn)題,因?yàn)轫?xiàng)目需要集成不同的sdk。相對(duì)應(yīng)的也是不同的.so文件。

針對(duì)libs中.so庫(kù)的引入會(huì)遇到一些問(wèn)題。

比如要集成第三方NDK庫(kù):

image.png

如果是在eclipse中,需要放到libs下對(duì)應(yīng)庫(kù)的目錄。
如果是在Android Studio中,則會(huì)默認(rèn)匹配main下的jniLibs目錄,如果沒(méi)有目錄需要自己手動(dòng)創(chuàng)建。并且?guī)斓拿Q也不能隨便更改。

但是這里會(huì)有一個(gè)問(wèn)題,就是如果使用的是AndroidStudio,但是想用libs下的庫(kù),還需要手動(dòng)去指定庫(kù)的位置:

在App下的build.gradle中加入以下配置。

   android {
        ......
        sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
                ......
            }
            ......
        }
        ......
    }

在集成第三方服務(wù)商sdk的時(shí)候,大多數(shù)都會(huì)讓你下載demo,或者是SDK集合包,讓你直接拷貝整個(gè)libs或者jniLibs目錄,合并本地項(xiàng)目。這樣就會(huì)出問(wèn)題。

以訊飛語(yǔ)音開(kāi)發(fā)文檔、百度語(yǔ)音開(kāi)發(fā)文檔和極光推送文檔為例

訊飛的文檔中說(shuō)明是將libs目錄下所有的文件拷貝至自己項(xiàng)目中的libs目錄。

訊飛集成說(shuō)明

百度的則是將app/src/main/jniLibs下的所有文件拷貝至自己的項(xiàng)目。

百度集成說(shuō)明

極光文檔就顯得比較人性化

極光集成說(shuō)明

如果你要集成前面兩家的sdk,顯然就會(huì)出現(xiàn)沖突。

build配置后,jniLibs庫(kù)就無(wú)法被識(shí)別。但是不配置的話,libs庫(kù)無(wú)法識(shí)別。
結(jié)果是改來(lái)改去總有一方庫(kù)無(wú)法加載.so文件。

所以要解決的話,就拋棄前面的文檔吧。
正確姿勢(shì)是把所有的.so所對(duì)應(yīng)的庫(kù)要么全部放在libs,要么全部放在jniLibs。
eclipse現(xiàn)在的使用者已經(jīng)很少了,所以還是以Android Studio為主。建議全部放在jniLibs,不需要額外的任何配置。

說(shuō)點(diǎn)題外話

在第三方提供的NDK庫(kù)中,大多都是成套的為了適配不同的cpu廠商,也就是常說(shuō)的高通,聯(lián)發(fā)科這些。

在拷貝庫(kù)的時(shí)候也會(huì)成套的拷貝進(jìn)項(xiàng)目,一般是四五個(gè),百度語(yǔ)音的.so庫(kù)全部導(dǎo)入的話加起來(lái)足足在15M以上。

所以在選擇第三方服務(wù)的時(shí)候這也是需要考慮的一個(gè)因素。

我的demo為例,最近公司要選擇一套語(yǔ)音方案,所以暫時(shí)就體驗(yàn)了百度的和訊飛的。
集成之前安裝包是4M,集成后21M。

image.png

如果要精簡(jiǎn)通過(guò)so庫(kù)來(lái)減少安裝包的大小其實(shí)還可以通過(guò)動(dòng)態(tài)選擇需要添加的.so庫(kù)

在App下的build.gradle中配置:

ndk {
            //選擇要添加的對(duì)應(yīng)cpu類型的.so庫(kù)。
            abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
            // 還可以添加 'x86', 'x86_64', 'mips', 'mips64'
        }

這樣就可以指定加載庫(kù)。


相關(guān)文檔參考:
ANDROID動(dòng)態(tài)加載 使用SO庫(kù)時(shí)要注意的一些問(wèn)題
Android jniLibs下目錄詳解(.so文件)

項(xiàng)目demo參考:
android-CollectionDemo

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

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,940評(píng)論 25 709
  • 推送技術(shù)產(chǎn)生場(chǎng)景: --服務(wù)器端主動(dòng)性: 客戶端與服務(wù)器交互都是客戶端主動(dòng)的, 服務(wù)器一般不能主動(dòng)與客戶端進(jìn)行數(shù)據(jù)...
    原軍鋒閱讀 35,177評(píng)論 4 60
  • 都說(shuō)國(guó)慶堵得慌,我也一直都是知道的,但是從深圳到江西,居然跨越了三天就有點(diǎn)難以置信了,本熊30號(hào)出發(fā),2號(hào)凌晨到家...
    小熊話保險(xiǎn)閱讀 294評(píng)論 0 0
  • 沒(méi)有葉子的樹(shù) 雖然沒(méi)有衣服 他也沒(méi)有哭訴 沒(méi)有葉子的樹(shù) 樹(shù)梢上的鳥(niǎo)窩 也看得很清楚 沒(méi)有葉子的樹(shù) 他輕輕搖搖頭 迎...
    四知錄閱讀 569評(píng)論 5 6
  • 江南的細(xì)雨纏綿了半月之久。 感受到一股流食隨著咽喉入體,他的意識(shí)也逐漸蘇醒。像是在黑夜中徘徊了太久,此刻內(nèi)心也只...
    不嗝兒閱讀 364評(píng)論 0 0

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