android开发拓展

64位app 和 32位app

2019-05-15  本文已影响0人  feifei_fly

一、架构差异

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

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

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

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

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

常用的abi有:

二、几个关系:

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

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

1、arm64-v8a 为第一选择 
2、armeabi-v7a为第二选择
3、armeabi为第三选择

针对64位的系统:

[图片上传失败...(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

[图片上传失败...(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

[图片上传失败...(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/安装目录来查看:

参考文章:

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

上一篇下一篇

猜你喜欢

热点阅读