Flutter杂症(couldn't find "libflutter.so")

引起的缘由

致使这个问题出现的缘由是由于咱们在项目种使用了so库,或者项目中引用的三方sdk使用了so库。在引用so库时须要针对不一样的cpu架构使用不一样的.so文件。armeabi,armeabi-v7a,x86,arm64-v8a,你们一般会对这几个cpu架构进行适配。然而问题就出在如今Flutter在打包Apk时不能同时引入arm32和arm64的libflutter.so。我门将打好包的Apk安装到arm64架构(默认打包会引入arm32)的手机上时就出现了couldn't find libflutter.so这个异常。android

如何解决

  1. 针对arm32和arm64分别打包(flutter 提供了命令来之分别对arm32和arm64分别打包)架构

    • flutter build apk --target-platform=android-arm32app

    • flutter build apk --target-platform=android-arm64gradle

    咱们用flutter build apk --target-platform=android-arm64打包apk,并在arm64cpu架构的手机安装运行,很好完美运行。可是当咱们吧apk安装到32位时问题再次出现,缘由就再也不重复了。很显然到这里这个方式并不能解决这个问题,为了适配arm32和arm64咱们须要分别打包,而国内大部分应用市场不能针对不一样cpu架构上传不一样的apk。ui

  2. 不对arm64作适配,打包时排除其余非arm32架构的so文件spa

    这时候有些朋友可能会又疑问,问题不就是由于打包时没有引入arm64的libflutter的so文件致使在arm64架构手机上出现“兼容”问题的么。这里简单说一点关于引用so库的一些知识,了解的朋友你们直接跳过就能够。arm64cpu架构是能够像下兼容的,简单点就是arm64架构的cpu可使用arm32的.so文件。出现问题真正缘由是咱们在引用so库时(引用的三方库中引用了so库),对arm64作了兼容。这样就会致使运行时系统误觉得咱们的应用对全部的so库作了arm64架构的兼容,可是在打包时libflutter并无引入arm64的版本。这就致使系统去寻找arm64版本的libflutter发现找不到。系统误会了咱们,我门只能经过gradle在打包时排除其余非arm32架构的so文件来解除这个误会。debug

    好那如何排除其余非arm32架构的so文件。在app下的gradle文件加入以下代码code

    buildTypes {
         release {
             ndk{
                 //这里其实我觉能够直接是用"armeabi-v7a",但国内几个大哥以前使用的都是"armeabi"
                 abiFilters "armeabi"
             }
         }
         debug {
             ndk {
                 //这里要加上,不然debug包会出问题,后面三个为可选,x86建议加上否则部分模拟器回报错
                 abiFilters "armeabi", ,"armeabi-v7a","arm64-v8a", "x86"
             }
         }
     }
    复制代码

最后

这个问题在官方issues已经存在好久了暂时没有完美的解决方法,有新的方法我会第一时间更新。 后续我会持续更新一些Flutter开发时遇到的问题,以及一些好的文章(可能包含生肉,本人英文能力有限尽可能尝试炒熟)。但愿能帮你们少走一些弯路。有些理解不到位也但愿你们指正帮助进步,提早谢过你们。谢谢。orm

相关文章
相关标签/搜索