成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

android多cpu架構(gòu)適配開篇

簡介:做項目的時候經(jīng)常會使用到so文件。例如使用高德地圖,其SDK中就包含了armeabi、armeabi-v7a、arm64-v8a、x86等其他文件夾,里面通常放著同樣名稱、同樣數(shù)量的so文件。實際使用過程中,關(guān)于這些so文件引發(fā)的問題確實不少,也不好解決。寫下此文,希望以后遇到相關(guān)的問題,能有個大概的思路。

在忻州等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供網(wǎng)站建設、成都網(wǎng)站制作 網(wǎng)站設計制作定制網(wǎng)站建設,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,品牌網(wǎng)站建設,網(wǎng)絡營銷推廣,外貿(mào)網(wǎng)站建設,忻州網(wǎng)站建設費用合理。

名詞解析:

    NDK:Native Development Kit

    JNI:Java Native Interface

    ABI: Application Binary Interface 應用二進制接口

Android Studio使用so庫

1、使用和eclipse一樣在libs目錄下新建armeabi目錄的方式

需要在build.gradle中添加指定jni庫目錄的語句

sourceSets {

   main.jniLibs.srcDirs = ['libs'] //指定libs為jni的存放目錄

}

2、使用AS默認的位置:src/main/jniLibs

直接在src/main/下新建jniLibs目錄,將armeabi等目錄放到該目錄下即可

備注:AS可以直接右鍵新建同目錄下的jniLibs目錄,但該目錄不是編譯好的庫文件目錄,而是未編譯的本地代碼文件的目錄(這里指的是與java同級的jni目錄,放置cpp代碼的)


android支持的cpu架構(gòu)(目前是七種)

armeabi第5代 ARM v5TE,使用軟件浮點運算,兼容所有ARM設備,通用性強,速度慢
armeabi-v7a第7代 ARM v7,使用硬件浮點運算,具有高級擴展功能
arm64-v8a第8代,64位,包含AArch42、AArch74兩個執(zhí)行狀態(tài)對應32、64bit
x86intel 32位,一般用于平板
x86_64intel 64位,一般用于平板
mips少接觸
mips64少接觸

安裝時的兼容性檢查:

   安裝到系統(tǒng)中后,so文件會被提取在:data/app/com.xxxxxxxx.app-x/lib/目錄下(5.0版本)、/data/app-lib/目錄下(4.2版本),其中armeabi和armeabi-v7a會生成arm目錄,arm64-v8a會生成arm64目錄。

   安裝app的時候,如果app使用了so文件,而不存在適合本機cpu架構(gòu)的so文件,會報如下錯誤:

Installation failed with message INSTALL_FAILED_NO_MATCHING_ABIS.

例如:在x86模擬器上就必須有x86版本的so文件夾。不然無法安裝成功。

運行時的兼容性檢查:

1、檢查目標目錄下是否存在的so庫文件

2、檢查存在的so文件是否符合當前cpu架構(gòu)。

   對于情況一,一般規(guī)避的做法是:保證jnilibs目錄下x86、x84_64、armeabi、armeabi-v7a、arm64-v8a等目錄下的文件名稱數(shù)量是一致的。

   例如:項目中使用了A、B、C三個第三方庫。其中A、B提供了armebi以及arm64-v8a版本的庫文件,而C只提供了armebi、armebi-v7a版本的庫文件。這時候只能夠刪除原有的arm64-v8a目錄,保留armeabi目錄,一般arm64的手機都能兼容使用armeabi版本的庫?;蛘邚椭埔环輆rmeabi的so文件到缺少的目錄中(推薦)。

生成so文件:

   NDK交叉編譯時選定APP_ABI := armeabi x86 ...可以生成支持相應芯片的so文件。APP_ABI := all生成支持所有芯片指令集(目前七種)so文件。

Android加載so文件規(guī)則:

   當你只提供了armeabi目錄時,armeabi-v7a、arm64-v8a架構(gòu)的程序都會去armeabi里尋找,而當你同時也提供了armeabi-v7a、armeabi-v8a目錄,而里面又不存在對應的so庫時,系統(tǒng)就不會再去armeabi里面尋找了,直接找不到報錯。其他平臺也是如此。這里我踩了不少的坑,切記。

   一般來說,一些比較有名的第三方庫都會提供armeabi、armeabi-v7a、x86這三種類型的so文件,同時擁有這三種版本的app可以在所有機型上運行。另外,越來越多的SDK會同時提供arm64-v8a版本。只包含armeabi的項目也可以在所有設備上運行。

現(xiàn)實案例:

   我的項目中使用了armeabi、arm64-v8a兩種類型,而當我需要使用某語音第三方庫的時候,發(fā)現(xiàn)只提供了armeabi、armeabi-v7a兩種類型的so文件,而我的手機是arm64-v8a的。所以只會使用arm64-v8a里面的so文件,當使用到該語音庫時找不到對應的so庫,就會報錯。理論上有以下兩種解決方法:

一、刪除所有arm64-v8a,只保留armeabi,全部使用兼容性最高的版本,但也運行速度最慢。

二、將該語音庫的armeabi版本的so復制到arm64-v8a中。單一so文件使用armeabi兼容版本。

總結(jié):

  1. 當你使用到so文件時,保證每個子文件夾中文件名稱數(shù)量都是一致的。

  2. 對于只提供armeabi的第三方庫,復制一份armeabi的so文件到缺失的其他目錄中;或者只保留armeabi目錄(不推薦)

參考文檔:

   與 .so 有關(guān)的一個長年大坑

   Android 關(guān)于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容問題

   關(guān)于Android的.so文件你所需要知道的

新聞標題:android多cpu架構(gòu)適配開篇
分享鏈接:http://www.jinyejixie.com/article32/jogepc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化網(wǎng)站排名、App開發(fā)響應式網(wǎng)站、網(wǎng)頁設計公司、電子商務

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化