前言
首先要知道,64位的设备是兼容32位so文件的,目前很多主流app都是只在app中放置32位so,目的是减小apk的打包体积,弊端就是在64位设备上运行时不能充分发挥64位cpu的计算能力。
但是我们项目没有这么做,而是在app中同时放了32和64位so,导致apk的体积暴增,原因是app中有3D图形加载比较耗cpu,因此在64位设备上运行为了实际体验使用64位的so,而其他功能如mp3转码,pdf查看也需要用到so文件,直接用32位就够了。那么问题来了,有没有可能在app中只放置加载图形需要的64位so,和其他功能需要的32位so呢?让32和64位so混合使用。
尝试过程
先说结论,如果用64位so的功能没有UI交互(比如视频转码这类),有办法解决。如果这部分功能需要界面交互的,目前无法解决。
查了一些技术文章,是说android不允许混合使用so文件,要么全部使用32位要么全部使用64位,总之在lib目录文件要放全,否则加载的时候找不到对应文件就会崩溃。那我先尝试了多进程方式动态加载,就是在lib目录只放了部分32位so,然后我把需要64位so的图形功能Activity放到新的进程,动态加载64位so文件,还是报错。
接着尝试蒙骗lib文件夹,我直接把64位so放到armeabi目录,企图蒙骗过关,但是加载的时候就报错了,虚拟机发现armeabi里面放的不是32位so。。。
接着尝试,app项目中什么so都不放,先动态加载32位,再动态加载64位so。还是不行
试了一天没办法了,我决定去sta