如何从给定的 .apk 中找出哪个架构版本用于给定的应用程序安装?

How to find out which architecture version from a given .apk was used on a given app installation?

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

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

在安装过程中指定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

检查 运行ning 进程的 ABI:

这可能被认为是 Hack,但对我有用。

如果您已经安装了 .apk 并且不想重新安装它,您可以在感兴趣的 .apk 文件中检查 .so 文件的名称(f.e. 使用 mc).在我的例子中,它们位于 /lib/armeabi-v7a/lib/arm64-v8a 下。然后你可以 运行 你的设备上的应用程序(在我的例子中 Android 牛轧糖在 aarch64 上)并做:

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

运行:亚行shell 运行: dumpsys 包包 | grep

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