今天项目中遇到了一个问题,小伙伴在打包的时候发现报错 couldn't find "libflutter.so" 。在詹姆斯.刘的帮助下,把这个地方调试通了。那么我们今天就来讲一讲这个问题。以下是本期目录:
一、so是什么?
在android开发中,大家对so文件一定不陌生。在开发中,android的原生代码一般使用C、C++编写,然后编译生成一个动态链接库,就是文件后缀为.so的ELF文件。so文件是unix(一个系统的名字)的动态连接库,是一个二进制文件,作用相当于windows下的.dll文件。在andorid中调用so都是通过jni的方式调用。android中提供了相关的方法,loadLibrary的作用就是加载这个动态链接库,这样后面的代码调用才能成功的找到对应的原生函数。大家也都知道,一般加载so的代码要写到static块中,因为静态代码块的执行时机非常早,比什么构造函数、onCreate都要早,在类加载的时候就被调用。关于so的问题,并非此文章的重点,我们以后的内容中专门在讲。
二、目前手机cpu的架构有哪些?
早期的Android系统几乎只支持ARMv5的CPU架构,目前支持七种,总体来说,Android手机大部分采用的是ARM架构的CPU。
| 架构 | 说明 |
| armeabi | ARM架构的默认选项,支持基于 ARM* v5TE 的设备,支持软浮点运算,但不支持硬件辅助浮点运算,支持所有的 ARM* 设备。 |
| armeabi-v7a | armeabi-v7a 向下兼容,在兼容 armeabi 的基础上,支持基于 ARM* v7 的设备,支持硬件 FPU 指令,支持硬件浮点运算,目前大部分机器都属于armeabi-v7a。 |
| arm64-v8a | arm64-v8a向下兼容 armeabi 和 armeabi-v7a,最主要的区别在于 arm64-v8a 支持64位,在 MIPS64 架构上增加了 ARMv7 架构中已经拥有的的TrustZone技术、虚拟化技术及NEON advanced SIMD技术等特性(ARM收购MIPS)。架构中包含两个执行状态:AArch32(也就是我们常说的ARMv7)和AArch64(ARMv8),也就是说64位的ARM处理器中同时包含着32位的ARMv7和64位的ARMv8两种架构,直接导致每种架构所拥有的晶体管减半。 |
| x86 | X86构架是英特尔推出的一种复杂指令集,用于控制芯片的运行的程序,目前该构架的处理器已经广泛运用在PC领域,由于X86构架的处理器芯片在性能上比较强劲,善于执行复杂工作。X86构架属于典型的CISC,指令集丰富,指令不等长,善于执行复杂工作,更强调串行性能。x86机器基本上可以使用 intel 的 libhounini 项目直接在x86机器上运行仅含armeabi的动态库代码,也就会说x86机器对armeabi也能够兼容,不过性能上会有些损耗。 |
| x86_64 | 英特尔推出的64位CPU架构,向下兼容x86。 |
| mips/mips64 | MIPS是一种高性能的嵌入式CPU构架,其出发点是高性能,主要用于路由器、猫等 |

本文详细解析了在Flutter项目中,打包时遇到的couldn'tfind 'libflutter.so'错误的原因与解决方法。从理解不同CPU架构开始,介绍了如何指定Android打包的架构,分析了Flutter支持的CPU架构,最终给出了明确的解决方案。
3298

被折叠的 条评论
为什么被折叠?



