如何将 android 个静态库与不同的 ABI 结合起来?
How to combine android static libraries with different ABIs?
我已经构建了 android 静态库 4 次,每次都有不同的 ABI。所以我有这个文件:
someLib_armeabi-v7a.a
someLib_arm64-v8a.a
someLib_x86.a
someLib_x86_64.a
我如何(如果可能的话)将它们合并到一个包含所有 ABI 的库中?
提前致谢。
你不能。
这些是包含机器代码的文件,每个文件用于不同的 CPU 体系结构,并且没有文件格式允许您将它们打包在一起并让加载程序决定加载什么。
另请注意,*.a
文件是静态库,不能直接使用。
您需要将它们 link 放入动态库 - 一个 *.so
文件,然后才能将它们添加到您的应用程序。
在 Android 上,构建 APK 时,本机库被打包在 APK(实际上是一个 ZIP)内的单独文件夹中,以 ABI 命名,如下所示:/lib/arm64-v8a/someLib.so
或 /lib/armeabi-v7a/someLib.so
此打包由构建系统自动完成,前提是您正确配置了项目,并且设备上的 OS 有必要找到并使用该库。
但是 Google 建议使用“应用程序包”,它会自动将您的 APK 拆分为几个针对每个设备架构优化的不同 APK,以减少用户的存储空间和下载带宽。
我已经构建了 android 静态库 4 次,每次都有不同的 ABI。所以我有这个文件:
someLib_armeabi-v7a.a
someLib_arm64-v8a.a
someLib_x86.a
someLib_x86_64.a
我如何(如果可能的话)将它们合并到一个包含所有 ABI 的库中?
提前致谢。
你不能。
这些是包含机器代码的文件,每个文件用于不同的 CPU 体系结构,并且没有文件格式允许您将它们打包在一起并让加载程序决定加载什么。
另请注意,*.a
文件是静态库,不能直接使用。
您需要将它们 link 放入动态库 - 一个 *.so
文件,然后才能将它们添加到您的应用程序。
在 Android 上,构建 APK 时,本机库被打包在 APK(实际上是一个 ZIP)内的单独文件夹中,以 ABI 命名,如下所示:/lib/arm64-v8a/someLib.so
或 /lib/armeabi-v7a/someLib.so
此打包由构建系统自动完成,前提是您正确配置了项目,并且设备上的 OS 有必要找到并使用该库。
但是 Google 建议使用“应用程序包”,它会自动将您的 APK 拆分为几个针对每个设备架构优化的不同 APK,以减少用户的存储空间和下载带宽。