部署ARMv7编译代码获取INSTALL_FAILED_CPU_ABI_INCOMPATIBLE

时间:2014-12-18 10:38:14

标签: android java-native-interface arm native

我的项目包括仅为ARMv7编译的本机库。当我尝试在三星Galaxy Y(有ARMv6)上安装它时,我收到INSTALL_FAILED_CPU_ABI_INCOMPATIBLE错误。

但是,我想让我的应用程序可以部署到每个设备,无论它们是否具有ARMv7。如果目标设备是ARMv7,则使用本机库将是一个优势。就是这样。对于其他设备,应用程序将在不调用本机方法的情况下完成其工作。 (由于libary有一个很大的.so文件,我不想包含其他架构的编译。)

有任何想法可以克服这个错误吗?如何告诉Android忽略为不同架构编译的本机库并使我的APK可以部署?

PS。我正在寻求灵魂而不是"创造多个APK"

由于

1 个答案:

答案 0 :(得分:4)

因此,通过查看NDK文档,我发现了这个有趣的提示(查看docs / Programmers_Guide / html / md_3__key__topics__c_p_u__support__chapter_1- section_8__a_b_is.html中的NDK文件夹):

  1. 将您的图书馆置于资产文件夹
  2. 在运行时使用此java调用检测cpu体系结构:String arch = System.getProperty(“os.arch”);
  3. 如果结果类似于“armv71”,则将lib从资产复制到lib subdir中的数据目录:/ data / data /< package_name> / lib /
  4. 现在您可以安全地调用System.loadLibrary(...)