如何找出在给定的应用程序安装中使用给定.apk中的哪个体系结构版本?

时间:2019-07-19 09:20:48

标签: android android-ndk installation

单个 .apk文件可能包含针对不同体系结构(例如x86,x86-64等)的NDK二进制文件。我想,在给定设备上安装时,将根据设备体系结构自动选择相应的二进制文件。但是,由于例如64位设备通常与32位软件兼容,因此我想确保已安装相应的二进制文件。

编辑: -我的意思是出于测试目的的本地安装。 -我知道您可以有不同的.apk,每个都针对一种特定的体系结构。假设只有一个包含所有架构目标。

2 个答案:

答案 0 :(得分:0)

在安装过程中指定ABI:

使用adb install选项通过--abi安装应用程序时,您可以显式指定ABI。

对于Aarch32:

adb install --abi armeabi-v7a <YOUR_APK_FILE>.apk

对于Aarch64:

adb install --abi arm64-v8a <YOUR_APK_FILE>.apk

参考:https://developer.android.com/distribute/best-practices/develop/64-bit#test_your_app_on_64-bit_hardware

检查正在运行的进程的ABI:

这可能被视为黑客,但是对我有用。

如果您已经安装了.apk并且不想重新安装它,则可以检查感兴趣的.so文件中的.apk文件的名称(例如,使用mc) 。就我而言,它们位于/lib/armeabi-v7a/lib/arm64-v8a下。然后,您可以在设备上运行应用程序(在我的情况下为aarch64上的Android Nougat)并执行以下操作:

cat /proc/<PID_OF_YOUR_RUNNING_APP>/maps | grep <NAME_OF_SO_FILE>

对于使用--abi armeabi-v7a选项安装的.apk,路径名是:

/data/app/<APP_NAME>/lib/arm/<NAME_OF_SO_FILE>

带有--abi arm64-v8a选项:

/data/app/<APP_NAME>/lib/arm64/<NAME_OF_SO_FILE>

proc文件系统的参考:http://man7.org/linux/man-pages/man5/proc.5.html

答案 1 :(得分:0)

运行:adb shell 运行:dumpsys package软件包| grep

它将为您提供到外部本机目录的路径,即/ data / app // lib / YOUR_INSTALLED_LIB_ARCHITECTURE 另外,您可以使用https://play.google.com/store/apps/details?id=com.xh.nativelibsmonitor.app这个应用程序,它将提供应用程序中打包的库的详细信息以及应用程序中安装的库的体系结构。