64位Android加载32位动态库

        目前大多的Android设备已经都是64位的了,但是很多的基础库还是32位的。前几天我在工作中就遇到了一个64位设备 上需要安装一个APP,这个APP要使用32位的动态库,此应用并且需要平台编译。在正常编写了Anroid.mk,成功编译并安装后,无法正常运行,通过日志分析其寻找动态库的路经都同arm64/等。
在Google的官网上,我找到了这个问题的答案。
https://source.android.google.cn/setup/develop/64-bit-builds?hl=en

我先是在确认将APP编译成32位。在平台编译时Android.mk需要配置
LOCAL_MULTILIB=32
应用成功编译但是运行时,加载动态库的路径仍是arm64,应用没有编译成32位的?

尝试增加
LOCAL_MODULE_TARGET_ARCH=arm
在编译是确实没有编译此应用。确认平台编译时,就像官网中说到的那样默认中只编译64位版本的。官网只是说需要修改
BoardConfig.mk
来实现32位的编译,我发现我们平台使用的BoardConfig.mk中有GPU=32相关的配置,但为什么仍然有问题呢? 在找到一个可以正常运行此应用,并且也是通过平台编译安装的平台编译环境进行对比BoardConfig.mk后, 发现其多了几个配置,其中一个是
TARGET_SUPPORTS_32_BIT_APPS := true
经过验证,在BoardConfig.mk中加上这个配置,
TARGET_SUPPORTS_32_BIT_APPS := true
平台编译时会同时编译32版本的应用,此应用最终正常运行并正确加载了32位动态库。

总结如下:
1、要想让APP加载32位的动态库,需要将APP编译成32位。 在平台编译时Android.mk需要配置LOCAL_MULTILIB=32
2、并且平台需要增加对32位APP的支持,在BoardConfig.mk中 增加 TARGET_SUPPORTS_32_BIT_APPS := true

转载于:https://my.oschina.net/yuyang/blog/3081905

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值