flutter安卓下对各种指令集的选择编译

安卓加载so的顺序是先去最合适自己的目录下查找,如果目录不存在就往下兼容找,比如一台arm64的安卓先去lib/arm64-v8a下找so,如果目录存在但so不存在就报错, 如果目录不存在就去armeabi-v7a目录下找,

flutter是支持arm64-v8a armeabi-v7a android-x64 android-x86,先只考虑arm的情况

flutter build命令和flutter run命令都有一个–target-platform=android-arm参数, 如果没有指定参数, build命令使用default, 而run命令使用目标手机的cpu类型


  1. 在不添加"abiFilters "armeabi-v7a"时, 如果目前手机是arm64:
  • 使用flutter工程:全部使用的是arm64-v8a 正常运行
  • 使用android工程:libflutter.so在armeabi-v7a,其他so在arm64-v8a 不能运行
  1. 加入abiFilters, abiFilters “armeabi-v7a”:
  • flutter工程:lib/armeabi-v7a目录缺少libflutter.so, 不能运行 原因是目标手机是arm64, flutter脚本用的是arm64版本的flutter.jar, 应该可以加入–target-platform=android-arm搞定
  • android工程:libflutter.so在armeabi-v7a目录下 正常运行

疑问:为什么直接打开android工程编译, 不论是否加入"abiFilters “armeabi-v7a”, flutter都是应用的android-arm


附 flutter默认引擎支持的cpu指令集

安卓下:

使用flutter.jar包引入flutter,包含的目录有
android-arm 解压缩里面的flutter.jar,lib目录下只包含armeabi-v7a版本 不包含armeabi版本
android-arm-profile
android-arm-release
android-arm64 解压缩里面的flutter.jar,lib目录下只包含arm64-v8a
android-arm64-profile
android-arm64-release
android-x64 intel64位,主要是模拟器使用
android-x86 inter32位,主要是模拟器使用

结论: 默认是不包含armeabi版本的libflutter.so,所以如果要用需要自己编译

ios下

使用命令file bin/cache/artifacts/engine/ios/Flutter.framework/Flutter 显示内含3种架构
x86_64 armv7 arm64

结论:默认不包含arm32 (iPhone 4, iPhone 5)

你可能感兴趣的:(技术)