Answers:
查看APK的本机库所针对的体系结构的一种(相当粗略的)方法是将其解压缩(这只是一个zip文件)并查看libs文件夹-如果应用程序包含任何本机库,它们将被拆分为内部的以下子文件夹(其中的已编译库):
armeabi
:较旧的ARMv5架构的编译代码(32位,从r17的Android NDK中删除了对ARMv5的支持)
armeabi-v7a
:ARMv7架构的编译代码(32位)
arm64-v8a
:ARMv8体系结构(64位)的已编译代码
x86
:x86 体系结构(32位)的已编译代码
x86_64
:x86-64体系结构(64位)的已编译代码
mips
:针对MIPS32r1 架构和更高版本(32位,从r17的Android NDK中删除了对MIPS的支持)的已编译代码。
mips64
:MIPS64r6架构的编译代码(32位,从r17的Android NDK中删除了对MIPS64的支持)。
有关APK结构以及以上列表来源的更多信息,请参见Android应用程序包。可以在2016年4月18日捕获的Android Developer ABI Management页面的存档版本中找到更完整的列表(包括MIPS64)以及有关特定于体系结构的信息。
有趣的是,针对一个单一的ABI(其中一个应用程序包含为一种体系结构设计的本机库),并不一定意味着该应用程序不会在使用其他体系结构的设备上运行。例如,ARMv8-a 与ARM和ARMv7-a 向后兼容,英特尔的x86 Android设备包含专有的转换层,该转换层允许ARM代码在x86设备上执行(允许仅ARM的应用程序在x86平台上运行)。可以在ro.product.cpu.abilist
属性中找到Android设备可以执行的ABI列表,可以使用以下命令在外壳程序中获取该ABI (例如,通过设备上的终端应用程序或使用,通过adb获取adb shell
)。getprop
getprop ro.product.cpu.abilist