Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果我从我的android应用程序中排除所有64位库,它会完全以32位模式运行吗?_Android_Android Ndk - Fatal编程技术网

如果我从我的android应用程序中排除所有64位库,它会完全以32位模式运行吗?

如果我从我的android应用程序中排除所有64位库,它会完全以32位模式运行吗?,android,android-ndk,Android,Android Ndk,根据这个例子,我正在构建我的Android应用程序,不包括所有ARM v7和ARM64 v8库:(虽然我只在ARM系列中包括armeabi),这是因为我有一个只针对armeabi目标构建的第三方库。这项计划正如期发挥作用,但我仍有一个挥之不去的疑虑 在这个方案下,这是否意味着如果我在64位设备上运行应用程序,我的应用程序中运行的所有东西都是以32位模式运行的?换句话说,应用程序中包含的所有android/java代码最终都会到达支持库,它是否运行ARMv5版本的android SDK(例如,显示

根据这个例子,我正在构建我的Android应用程序,不包括所有ARM v7和ARM64 v8库:(虽然我只在ARM系列中包括
armeabi
),这是因为我有一个只针对
armeabi
目标构建的第三方库。这项计划正如期发挥作用,但我仍有一个挥之不去的疑虑


在这个方案下,这是否意味着如果我在64位设备上运行应用程序,我的应用程序中运行的所有东西都是以32位模式运行的?换句话说,应用程序中包含的所有android/java代码最终都会到达支持库,它是否运行ARMv5版本的android SDK(例如,显示例程、数学例程等)?或者,即使包含的二进制文件(即
.so
)都是ARMv5,对Android SDK的调用是否在平台本机代码上运行?

是的,如果APK安装程序选择安装32位二进制文件(从
armeabi
armeabi-v7a
目录),则整个过程,包括过程中的所有平台库,将以32位模式运行

这并不像你想象的那么戏剧性和糟糕。所有的平台库都将为您当前的设备进行最大程度的优化,即使是在32位模式下。因此,即使您的应用程序包含处于
armeabi
模式的二进制文件,该平台的库也不受基线的限制;他们将使用您特定设备上可用的任何最佳指令。唯一的缺点是它使用了效率稍低的32位模式,但实际的差异和影响很大

请注意,虽然
armeabi
armeabi-v7a
之间的性能差异很大,但两者都是32位兼容的;加载
armeabi-v7a
库的进程也可以加载
armeabi
格式的库。(您仍然需要在所有选择的ABI中提供所有二进制文件,但这更多是APK安装程序的设计选择。)

因此,如果您的应用程序只使用此第三方库,而不使用您自己的其他本机代码,您应该可以(尽管,根据库的功能,如果第三方库供应商提供
armeabi-v7a
arm64-v8a
版本,您将获得一些性能)。如果您的应用程序有自己的本机代码,您可能需要考虑在<代码> ARMEABIV-V7A模式中建立它,但是将第三方库从<代码> ARMEABI 复制到<代码> ARMEABIV-V7A。如上所述,它可以正常加载和运行,但可以通过更多优化构建您自己的代码。(由于32位和64位版本不兼容,因此无法将
armeabi
版本放入
arm64-v8a
中,正如您已经尝试过的那样。)


armeabi
armeabi-v7a
之间的主要区别在于,为后者构建的二进制文件将使用硬件浮点-如果您进行大量浮点计算,将对性能产生很大影响,否则不会有太大影响。
armeabi-v7a
arm64-v8a
之间的差异通常没有那么大,对于大多数代码来说,最多只有几个百分点。

谢谢。我停止过滤
armeabi-v7a
ABI,并将我的
so
包含在
armeabi
armeabi-v7a
中。我构建了这个,并在32位(ARMV7)设备和64位设备上运行了它,一切正常。谢谢你解释这一切!非常有帮助!