如何检测Android应用是32位还是64位

目录

1、前言

2、检测App

 3.应用是否包含 64 位库?


1、前言

从Android 4.4宣布支持64位系统以来,各终端方案厂商逐步推出了各自的64位soc解决方案。Google为了兼容之前32位系统的应用,在64位系统上也实现了对32位应用的支持。那么问题就来了,在一个64位系统的Android手机上如何检测应用是运行在32位还是64位环境?

2、检测App

任何一个Android手机用户对APK文件肯定不会陌生,它是一个Android应用资源的封装文件。当你下载安装一个App之后,从Launcher启动该应用,系统会由Zygote分叉出一个子进程来提供App运行的虚拟机和Runtime环境。与32位系统不同的是,在64系统中会同时存在两个Zygote进程——zygote和zygote64,分别对应32位和64位应用。所以,要进行App的32/64位检测,只需要看它的父进程是哪个Zygote即可。

下面的例子通过App的PPID信息——2759,检测出了终端系统中所有的64位应用,且该方式无需root权限

$ adb shell ps |grep zygote
root      2759  1     2131692 87052          0 0000000000 S zygote64
root      2760  1     1574048 53740          0 0000000000 S zygote

$ adb shell ps|grep 2759
root      2759  1     2131692 87052          0 0000000000 S zygote64
system    3257  2759  2339956 158936          0 0000000000 S system_server
radio     3393  2759  1601272 96220          0 0000000000 S com.android.phone
u0_a85    3407  2759  1564856 88740          0 0000000000 S com.android.inputmethod.latin
u0_a20    3422  2759  1970228 167288          0 0000000000 S com.android.systemui
u0_a7     3769  2759  1548288 63384          0 0000000000 S android.ext.services
u0_a13    3958  2759  1896704 131832          0 0000000000 S com.android.launcher3
u0_a6     3989  2759  1562416 94060          0 0000000000 S android.process.acore
u0_a17    4046  2759  1563300 88504          0 0000000000 S android.process.media
u0_a28    4112  2759  1555640 82004          0 0000000000 S com.android.quicksearchbox
u0_a64    4157  2759  1554484 72944          0 0000000000 S com.android.calendar
u0_a57    4215  2759  1572160 83532          0 0000000000 S com.android.email
u0_a77    4231  2759  1554408 67192          0 0000000000 S com.android.exchange
u0_a5     4279  2759  1549136 66072          0 0000000000 S com.android.onetimeinitializer
u0_a10    4299  2759  1552472 74088          0 0000000000 S com.android.providers.calendar
u0_a94    4325  2759  1869948 112984          0 0000000000 S com.android.soundrecorder
system    4345  2759  1561180 73680          0 0000000000 S com.sprd.engineermode
u0_a15    4887  2759  1874612 106196          0 0000000000 S com.android.packageinstaller
u0_a73    5133  2759  2425904 205912          0 0000000000 S com.android.browser

 3.应用是否包含 64 位库?

首先要确保这两个文件夹中都有原生库。总结如下:

平台 32 位库文件夹 64 位库文件夹
ARM lib/armeabi-v7a lib/arm64-v8a
x86 lib/x86 lib/x86_64

第一步  打开自己要检测的APP

如何检测Android应用是32位还是64位_第1张图片

查看 lib 文件夹,可以在其中找到所有“.so”文件。如果在的应用中找不到任何“.so”文件,则说明该应用已经准备好相应的库,无需采取进一步措施。如果看到 armeabi-v7a 或 x86,则说明有 32 位库。

如何检测Android应用是32位还是64位_第2张图片

检查是否在 arm64-v8a 或 x86_64 文件夹中也有类似的“.so”文件。

如果您没有任何 arm64-v8a 或 x86_64 库,则需要更新编译流程以开始在 APK 中编译并打包相应工件。

第二步 添加64位的库就OK

// Your app's build.gradle
    apply plugin: 'com.android.app'
 
    android {
       compileSdkVersion 27
       defaultConfig {
           appId "com.google.example.64bit"
           minSdkVersion 15
           targetSdkVersion 28
           versionCode 1
           versionName "1.0"            
           ndk.abiFilters 'armeabi-v7a'//32位,'arm64-v8a'//64位 ,'x86'//32位,'x86_64'//64位
    // ...
 
然后点击编译就可以啦~
接着在用第一步判断就可以发现应用是否支持64位代码了

你可能感兴趣的:(android)