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类型


在不添加"abiFilters "armeabi-v7a"时, 如果目前手机是arm64:
使用flutter工程:全部使用的是arm64-v8a 正常运行

使用android工程:libflutter.so在armeabi-v7a,其他so在arm64-v8a 不能运行

加入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

此条目发表在未分类分类目录。将固定链接加入收藏夹。

发表评论