64位app 和 32位app

一、架構(gòu)差異

ARM是RISC(精簡指令集)處理器,不同于x86指令集(CISC,復(fù)雜指令集)。

ARM 有不同的CPU 架構(gòu) 包括:
ARMV8架構(gòu)、ARMV7架構(gòu)、ARMV5和ARMV6架構(gòu)

  • Arm32位是ARMV7架構(gòu),32位的,對應(yīng)處理器為Cortex-A15等;
  • ARM64位采用ARMv8架構(gòu)。64位操作長度,對應(yīng)處理器有Cortex-A53、Cortex-A57、Cortex-A73、iphones的A7和A8等,蘋果手機(jī)從iphone 5s開始使用64位的處理器。

ABI - Application Binary Interface 應(yīng)用程序二進(jìn)制接口,它描述了應(yīng)用程序和操作系統(tǒng)之間,一個(gè)應(yīng)用和它的庫之間的低接口。

一個(gè)操作系統(tǒng)是64位的,運(yùn)行于它之上的可以是64位的程序,也可以是32位的程序。

一個(gè)程序 可以包含32位的so 也可以包含64位的so

常用的abi有:

  • armeabi 對應(yīng)著 ARMV5和ARMV6架構(gòu)

  • armeabi-v7a - 對應(yīng)著 ARMV7a架構(gòu),是32位的尋址長度,里面放置32位系統(tǒng)上運(yùn)行的so庫

  • armeabi-v8a - 對應(yīng)著 ARMV8架構(gòu),64位尋址長度,里面放置64位的so

  • x86 對應(yīng) x86架構(gòu)(PC機(jī)的架構(gòu)),里面放置x86上運(yùn)行的so

  • x86_64 對應(yīng)著x86_64架構(gòu),里面放置x86_64上運(yùn)行的so

二、幾個(gè)關(guān)系:

android 工程中 jnilib目錄 ->與編譯apk中l(wèi)ib目錄->apk安裝后解壓的lib之間的關(guān)系。

  • 1、Android項(xiàng)目中,可以有armeabi、armeabi-v7a、arm64-v8a 三個(gè)目錄。三個(gè)目錄中不為空的abi目錄以及目錄中的so文件都會(huì)被拷貝到編譯后的apk中。
    [圖片上傳失敗...(image-a0a902-1557935847007)]

上圖中,arm64-v8a為空,所以編譯后的apk中不包含arm64-v8a文件夾。

  • 2、apk中l(wèi)ib中存在多個(gè)armeabi,如armeabi、armeabi-v7a、arm64-v8a。
1、arm64-v8a 為第一選擇 
2、armeabi-v7a為第二選擇
3、armeabi為第三選擇

針對64位的系統(tǒng):

  • 如果apk中存在arm64-v8a文件夾,則認(rèn)為apk未64位的程序,安裝時(shí)會(huì)將arm64-v8a中的so拷貝到/data/app/package/lib/arm64目錄中.

[圖片上傳失敗...(image-5810dc-1557935847007)]

data/app/package/lib/目錄:

rk3399_mid:/data/app/com.sogou.teemo.testawpwebview-1/lib/arm64 # ls -l
total 5808
-rwxr-xr-x 1 system system    5752 1979-11-30 00:00 libeval-lib.so
-rwxr-xr-x 1 system system 2686344 1979-11-30 00:00 libeval.so
-rwxr-xr-x 1 system system   13928 1979-11-30 00:00 libimageutil.so
-rwxr-xr-x 1 system system  243152 1979-11-30 00:00 libmp3lame.so
  • 如果apk中不存在arm64-v8a,但有armeabi-v7a目錄,則在apk安裝過程中,會(huì)將apk中armeabi-v7a中的so 拷貝到/data/app/package/lib/arm/目錄,并且判定該程序是32位程序。

[圖片上傳失敗...(image-875df4-1557935847007)]

data/app/package/lib/目錄:

rk3399_mid:/data/app/com.sogou.teemo.testawpwebview-1/lib # ls
arm

rk3399_mid:/data/app/com.sogou.teemo.testawpwebview-1/lib/arm # ls -ls
total 320
 40 -rwxr-xr-x 1 system system  13680 1979-11-30 00:00 libimageutil.so
280 -rwxr-xr-x 1 system system 136452 1979-11-30 00:00 libmp3lame.so
  • 如果apk中不存在arm64-v8a 和armeabi-v7a ,但有armeabi目錄,則在apk安裝過程中,會(huì)將apk中armeabi中的so 拷貝到/data/app/package/lib/arm/目錄,并且判定該程序是32位程序。

[圖片上傳失敗...(image-6659a9-1557935847007)]

rk3399_mid:/data/app/com.sogou.teemo.testawpwebview-1 # ls
base.apk lib oat 

rk3399_mid:/data/app/com.sogou.teemo.testawpwebview-1/lib/arm # ls -ls
total 39848
  144 -rwxr-xr-x 1 system system    68087 1979-11-30 00:00 libchrome_100_percent.so
   24 -rwxr-xr-x 1 system system     7659 1979-11-30 00:00 liben-US.so
   40 -rwxr-xr-x 1 system system    13676 1979-11-30 00:00 libimageutil.so
  312 -rwxr-xr-x 1 system system   152828 1979-11-30 00:00 libmp3lame.so
  512 -rwxr-xr-x 1 system system   254977 1979-11-30 00:00 libresources.so
  104 -rwxr-xr-x 1 system system    46672 1979-11-30 00:00 libsogoulzma.so
38400 -rwxr-xr-x 1 system system 19636034 1979-11-30 00:00 libsogouwebview.so
  288 -rwxr-xr-x 1 system system   140720 1979-11-30 00:00 libsogouwebview_plat_support.so
   24 -rwxr-xr-x 1 system system     7512 1979-11-30 00:00 libzh-CN.so

三、如何區(qū)分64位qpp 和32位app

從Android 4.4宣布支持64位系統(tǒng)以來,各終端方案廠商逐步推出了各自的64位soc解決方案。Google為了兼容之前32位系統(tǒng)的應(yīng)用,在64位系統(tǒng)上也實(shí)現(xiàn)了對32位應(yīng)用的支持。

方式一:

當(dāng)你下載安裝一個(gè)App之后,從Launcher啟動(dòng)該應(yīng)用,系統(tǒng)會(huì)由Zygote分叉出一個(gè)子進(jìn)程來提供App運(yùn)行的虛擬機(jī)和Runtime環(huán)境。

與32位系統(tǒng)不同的是,在64系統(tǒng)中會(huì)同時(shí)存在兩個(gè)Zygote進(jìn)程——zygote和zygote64,分別對應(yīng)32位和64位應(yīng)用。

所以,要進(jìn)行App的32/64位檢測,只需要看它的父進(jìn)程是哪個(gè)Zygote即可。

feifeideMacBook-Pro:Desktop feifei$ adb shell ps | grep zygote
root      318   1     2183128 50544          0 0000000000 S zygote64
root      319   1     1620816 70548          0 0000000000 S zygote

feifeideMacBook-Pro:Desktop feifei$ adb shell ps | grep com.sogou.teemo.testawpwebview
u0_a52    2148  319   1235896 164208          0 0000000000 S com.sogou.teemo.testawpwebview

com.sogou.teemo.testawpwebview 的PID為2148,父進(jìn)程ID為319 (zygote),所以是32位程序。

方式二:

通過查看/data/app/package/lib/安裝目錄來查看:

  • 如果lib目錄下是arm文件夾,則是32位程序
  • 如果lib目錄下是arm64文件夾,則是64位程序

參考文章:

如何查看app是32位app還是64位app:http://m.itdecent.cn/p/8686931d31f0

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

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

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