64位app 和 32位app

一、架构差异

ARM是RISC(精简指令集)处理器,不同于x86指令集(CISC,复杂指令集)。

ARM 有不同的CPU 架构 包括:
ARMV8架构、ARMV7架构、ARMV5和ARMV6架构

  • Arm32位是ARMV7架构,32位的,对应处理器为Cortex-A15等;
  • ARM64位采用ARMv8架构。64位操作长度,对应处理器有Cortex-A53、Cortex-A57、Cortex-A73、iphones的A7和A8等,苹果手机从iphone 5s开始使用64位的处理器。

ABI - Application Binary Interface 应用程序二进制接口,它描述了应用程序和操作系统之间,一个应用和它的库之间的低接口。

一个操作系统是64位的,运行于它之上的可以是64位的程序,也可以是32位的程序。

一个程序 可以包含32位的so 也可以包含64位的so

常用的abi有:

  • armeabi 对应着 ARMV5和ARMV6架构

  • armeabi-v7a - 对应着 ARMV7a架构,是32位的寻址长度,里面放置32位系统上运行的so库

  • armeabi-v8a - 对应着 ARMV8架构,64位寻址长度,里面放置64位的so

  • x86 对应 x86架构(PC机的架构),里面放置x86上运行的so

  • x86_64 对应着x86_64架构,里面放置x86_64上运行的so

二、几个关系:

android 工程中 jnilib目录 ->与编译apk中lib目录->apk安装后解压的lib之间的关系。

  • 1、Android项目中,可以有armeabi、armeabi-v7a、arm64-v8a 三个目录。三个目录中不为空的abi目录以及目录中的so文件都会被拷贝到编译后的apk中。
    [图片上传失败...(image-a0a902-1557935847007)]

上图中,arm64-v8a为空,所以编译后的apk中不包含arm64-v8a文件夹。

  • 2、apk中lib中存在多个armeabi,如armeabi、armeabi-v7a、arm64-v8a。
1、arm64-v8a 为第一选择 
2、armeabi-v7a为第二选择
3、armeabi为第三选择

针对64位的系统:

  • 如果apk中存在arm64-v8a文件夹,则认为apk未64位的程序,安装时会将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安装过程中,会将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安装过程中,会将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

三、如何区分64位qpp 和32位app

从Android 4.4宣布支持64位系统以来,各终端方案厂商逐步推出了各自的64位soc解决方案。Google为了兼容之前32位系统的应用,在64位系统上也实现了对32位应用的支持。

方式一:

当你下载安装一个App之后,从Launcher启动该应用,系统会由Zygote分叉出一个子进程来提供App运行的虚拟机和Runtime环境。

与32位系统不同的是,在64系统中会同时存在两个Zygote进程——zygote和zygote64,分别对应32位和64位应用。

所以,要进行App的32/64位检测,只需要看它的父进程是哪个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,父进程ID为319 (zygote),所以是32位程序。

方式二:

通过查看/data/app/package/lib/安装目录来查看:

  • 如果lib目录下是arm文件夹,则是32位程序
  • 如果lib目录下是arm64文件夹,则是64位程序

参考文章:

如何查看app是32位app还是64位app:https://www.jianshu.com/p/8686931d31f0

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容