首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

启动时Flutter发行包或APK崩溃,dlopen失败:找不到库"libflutter.so“

这个问题通常是由于缺少或错误配置了Flutter引擎库文件所导致的。解决这个问题的步骤如下:

  1. 确保Flutter引擎库文件存在:检查你的Flutter项目中是否包含了正确的Flutter引擎库文件"libflutter.so"。该文件通常位于Flutter SDK的安装目录下的bin/cache/artifacts/engine目录中。如果该文件不存在,可以尝试重新安装Flutter SDK或更新Flutter SDK版本。
  2. 检查Flutter引擎库文件路径配置:在Flutter项目的Android工程中,打开app/build.gradle文件,确保以下代码片段中的flutterEngine配置正确:
代码语言:txt
复制
flutter {
    // ...
    androidFlutterConfig {
        target = 'libflutter.so'
    }
}
  1. 清理并重新构建项目:在Android Studio中,点击菜单栏的"Build",然后选择"Clean Project"和"Rebuild Project",以清理并重新构建项目。这有助于确保正确的库文件被包含在APK中。
  2. 检查依赖库配置:在Flutter项目的Android工程中,打开app/build.gradle文件,确保以下代码片段中的依赖库配置正确:
代码语言:txt
复制
dependencies {
    // ...
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.0'
    implementation 'androidx.appcompat:appcompat:1.3.0'
    // ...
}
  1. 更新Flutter和相关依赖:使用Flutter命令行工具运行flutter upgrade来确保你的Flutter SDK和相关依赖库是最新的。

如果上述步骤都没有解决问题,你可以尝试以下额外的步骤:

  • 检查Flutter引擎库文件的权限:确保"libflutter.so"文件的权限设置正确,以便应用程序可以访问它。
  • 检查设备架构:如果你的设备是使用非常规的架构(如ARM64-v8a、x86_64等),请确保你的Flutter引擎库文件支持该架构。你可以通过在app/build.gradle文件中的android.defaultConfig部分添加以下代码来指定支持的架构:
代码语言:txt
复制
ndk {
    abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
}

以上是解决启动时Flutter发行包或APK崩溃的一般步骤和注意事项。如果问题仍然存在,建议查看Flutter官方文档、社区论坛或向Flutter开发者社区寻求帮助。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 5.0 到 Android 6.0 + 的深坑之一 之 .so 动态的适配

,当你采用 api >=23 的sdk 编译的时候,安装到 Android 6.0 及其以上的手机的时候,大范围出现崩溃 或者 .so 加载失败,而在 6.0 以下的手机却正常;     Catch的信息...:dlopen failed: cannot locate symbol "XXXX" xxxx.so, XX 是泛配,此类崩溃信息,你完全可以对号入我"座"。...现在我用一句话说白它,就是:不同链接方式时,dlopen会打开指定的系统中(手机中)提供的动态,并使用 dlsym 获取符号地址,也就是说,如果,在此时的手机中如果找不到,那么就会出问题,一般和 API...如果去除动态静态链接的因素,则除了默认的“system”运行时之外,还有所谓的“gabi++”运行时、“stlport”运行时和“gunstl”运行时。...插件加载形式有:     1)dlopen     2)dlsym     3)dlclose   dlopen打开指定的系统中(手机中)动态

1.9K100
  • Flutter 异常处理方案——灰度与降级

    details) { reportError(details.exception, details.stack); }; 所谓 Flutter Engine 异常,以 Android 为例就是 libflutter.so...当然为了拉配置时防止 3 次重试都失败了,版的时候本地会存一份各 Flutter 页面的降级配置 Map,极端场景下,会自动开启降级。...3.4 产物加载失败降级 技术上我们使用了定制引擎并做了 Flutter 产物裁剪,每次版时 App.framework 中会存一份对应的减包 zip 的 md5 值,在用户首次启动 App 时会下载减包产物再去启动引擎...3.5 Flutter 相关崩溃降级 除此以外,我们也遇到过 Flutter 导致的崩溃,不属于引擎崩溃也不是产物加载问题,也不是 Flutter 异常,仅仅是 Flutter Plugin 的问题,如插件原生侧的实现逻辑问题导致的崩溃...对于这种情况,我们会记录崩溃 ANR 上报时的 topViewController 并溯源路径,如果当前路由栈内存在 Flutter Activity 或者 FlutterViewController

    2.5K10

    Flutter包大小治理上的探索与实践

    除了Flutter SDK内部Dart实现的优化,我们是否还有进一步优化的空间呢?答案是肯定的。...App打包时,会将配置1中的文件压缩上传到动态发布系统,并从APK中移除。 App每次启动时,向动态发布系统发起请求,请求需要下载的压缩包,然后下载到本地并解压,如果本地已经存在了,则不进行下载。...然后通过DynLoader提供的上传插件将libflutter.so、libapp.so和flutter_assets/bundle.zip从APK中移除,并上传到动态发布系统托管。...不经处理的话,瘦身后的APK一进到Flutter页面肯定会报错,因为此时so和flutter_assets可能都还没下载下来,即使已经下载下来,其位置也发生了改变,再使用原来的加载方式肯定会找不到。...动态加载:Flutter提供了FontLoader类来完成字体的动态加载。 当资源动态下发后,assets中已经没有字体文件了,所以静态加载会失败,我们需要改为动态加载。

    1.7K21

    移动安全入门之常见抓包问题二

    objection,其核心都是hook HTTP请求中用于校验证书的API,将结果返回正常。....p12"getAssets().open 案例一(某app上古版本,仅作分析) 使用jadx反编译安卓apk文件,由于存在混淆搜索关键词没有获取什么有价值的信息,更换工具为GDAJeb(jeb的反混淆优化更好一些...疑似使用了双向证书认证,对app进行脱壳查看代码,直接搜索.p12现几处关键点。 最终定位到密钥来源getvalue方法。 查看该方法发现该方法来源于so层中。 直接hook该方法返回值。...判断flutter应用 可以通过设备信息app查看,也可以通过⽇志grep flutter,如果有输出,⾃然也可以说明是flutter的。...,用IDA打开libflutter.so,搜索对应字符。

    1.4K20

    Linux下so动态一些不为人知的秘密

    下面我加入链接压缩,数学,线程 ? 看看,虽然没有用到,但是一样有链接进来,那看看程序启动时候有没有去加载它们呢? ? 看,有加载!!!...大家知不知道linux从程序(program对象)变成进程(process进程),要经过哪些步骤呢,这里如果详细的说,估计要另开一篇文章。...可以看到,第二步中dll依赖越多,进程启动越慢,并且发布程序的时候,这些链接但没有使用的so,同样要一起跟着发布,否则进程启动时候,会失败找不到对应的so。...路径不为人知的小秘密 我们知道Linux链接so有两种途径:显示和隐式。所谓显示就是程序主动调用dlopen打开相关so;这里需要补充的是,如果使用显示链接,上篇文章讨论的那些问题都不存在。...其次,使用dlopen打开的so并不是在进程启动时候加载映射的,而是当进程运行到调用dlopen代码地方才加载该so,也就是说,如果每个进程显示链接a.so;但是如果发布该程序时候忘记附带发布该a.so

    4.1K20

    货拉拉 Android 动态资源管理系统原理与实践(下)

    如何移除apk中的so文件,并将他们收集起来? 如何将多个so文件压缩打包,并生成对应的信息? 如何保证第三方sdk缺少so文件时,不崩溃?...看一眼这幅超级复杂的apk构建流程图,嗯,可以看到,系统确实会在apkBuilder构建前,将本地的c/c++文件编译成so,并将第三方的so一起打包到apk中,我们需要寻找的就是收集所有so的系统...保证第三方sdk在缺少so文件时,不崩溃 很多三方sdk都要求在应用启动时,进行初始化,一个使用so的类的典型类代码如下: public class ThirdLib{ //静态方法加载so static...它可以用于修改现有的class文件动态生成class文件。...一个是为了保证so不存在时,程序不崩溃,另外一个就是so下载校验完成后,能自动完成之前失败的加载,为此,我们设计了如下流程。

    1.1K31

    【运行时】FFI 链接 C ABI 动态链接(实操分享)

    否则,在编译过程中,会出现“找不到链接”的错误= note: ld.exe: cannot find -l。...在程序初始化过程中,寻找【C ABI动态链接】文件和链接之。 若出于某些原因dll丢了、找不到了,程序直接崩溃退出 —— 连写日志的机会都没有。 超恶心!既没日志,也没GUI错误提示框。...第三方crate可带来的好处 相比于直接写extern {...}块的简单粗暴,使用第三方crate(比如,dlopen)可带来的优势有两点: 延后【懒】链接【C ABI动态链接】。...若被依赖的【动态链接(文件)】不能被找到载入失败,那么你的应用程序至少还有机会弹出一个友好的【提示框】问询用户:“您是否误删了哪个.dll后缀文件?”...,而不是没头没脑地直接崩溃退出 — 特别是,禁用了console的【产品模式】真会导致什么崩溃线索都找不到。甲方还一口咬定一个文件都没有误删!太恶心了!

    1.1K30

    如何优化您的 Android 应用(Go 版)

    要低于 50 MB,游戏要低于 150 MB 将您的应用游戏的冷启动时间保持在 5 秒以下 现在我们来看一下这些性能指标,以现有 Android 开发人员为例。...Google Play 控制台中的 Android 重要功能可让您跟踪 ANR 和崩溃情况,并深入了解影响特定用户设备类型的错误。...然后,我们使用 Gradle 脚本将这个 Go-edition APK 以及我们的常规 APK 打包,所有这些都来自相同的代码。我们还使用尺寸更小的虚拟图像覆盖了第三方中的图像。...为了缩小我们 APK 的规模,我们首先通过架构和密度实现了多 APK,然后通过 ProGuard 在外部中分离出任何额外的类资源,“ Mercado Libre 的工程师 Nicolas Palermo...保持冷启动时间在 5 秒以下 感知是关键。在用户测试和研究中,等待应用程序游戏加载5秒后,人们会感到沮丧,这会导致放弃和卸载。

    1.8K20

    dex分包变形记

    Android 2.2和2.3的缓冲区只有5MB,Android 4.x提高到了8MB 16MB。当方法数量过多导致超出缓冲区大小时,也会造成dexopt崩溃。...这种方法优点是配置比较简单,但是最大的缺点是不能指定哪些类必须包含在主 dex 中,容易导致应用启动时某些类找不到,出现 Class Not Found Exception。...3.安装运行 我们把分包后的 apk 在 Android 4.3的手机上进行安装。没有问题,顺利安装上了! 没想到的是,启动时没出现任何页面,直接 crash。Crash 的 log 如下: ?...但是我们看到,单纯依赖于构建工具自动进行 dex 拆分时,我们无法决定干预哪些类应该放在主 dex,哪些类应该放在从 dex,这就可能导致启动时往往会有类找不到。...如果是启动时同步加载,一般可以在 Application 的 onCreate attachBaseContext 中执行加载,两者区别不大。

    1.7K110

    Android so 加载原理分析

    (void * handle); //关闭动态 对于动态加载过程先通过dlopen()打开动态文件,再通过dlsym()获取动态对象地址,加载完成则需要dlclose()关闭动态。...假设是64位系统, 则会去查找/system/lib64/libgityuan_jni.so/vendor/lib64/libgityuan_jni.so是否存在.另外,大多数的动态都在/system.../lib64/system/lib目录下。...开始的时候会去缓存查看是否已经加载过动态,如果已经加载过会判断上次加载的ClassLoader和这次加载的ClassLoader是否一致,如果不一致则加载失败,如果一致则返回上次加载的结果,换句话说就是不允许不同的...之后会通过dlopen打开动态共享。然后会获取动态中的JNI_OnLoad方法,如果有的话调用之。

    7.8K31

    【老孟FlutterFlutter 2 新增的功能

    自9月Flutter 1.22布以来,我们已经关闭了5807期并合并了298位贡献者的4091个PR。特别感谢我们的志愿者捐助者,他们慷慨地抽出时间来改进Flutter项目。...Flutter确实是社区的一项工作,如果没有问题提出者,PR贡献者和代码审查者,我们就不可能进入第2版。此版本适用于所有人。 Flutter 2行版中发生了很多令人兴奋的事情。...这使开发人员能够防止null错误崩溃,这是应用程序崩溃的常见原因。通过将空检查合并到类型系统中,可以在开发过程中捕获这些错误,从而防止生产崩溃。...扩展也对Flutter 2进行了改进,从许多测试增强功能开始,包括重新运行仅失败的测试的功能。...图片发布 Sentry崩溃报告工具现在支持Flutter 借助Sentry的Flutter SDK,您可以实时收到在Android,iOS本机平台上发生的错误的通知。

    7.8K20

    Matrix-ApkChecker的实际应用

    每当我想下载一个新App,在应用商店点击下载却看到“空间不足”的提醒时,我的内心是崩溃的。 每当我想下载一个新App,在地铁上看着自己的流量套餐剩余所剩无几时,我的内心是崩溃的。 ......那么我们应该怎样进行包体优化呢? 在初期,我们优先想到的就是分析安装包内的文件资源,查找到占用空间较大的文件 和 名称不同但内容相同的重复文件,尽可能的压缩 & 删除,缩减包体。...3、MultiLibCheckTask: 检查是否包含多个ABI版本的动态 (TaskTypeID:7) so 文件的大小会在Apk文件大小中占较大的比例,每个ABI支持一个多个CPU指令集,可以根据实际需要...9、UnStrippedSoCheckTask: 搜索apk中未经裁剪的动态文件 (TaskTypeId:14) so 文件的大小会在Apk文件大小中占较大的比例,经过裁剪后,文件大小会减小很多。...如果你的平台系统可以知道前一版本版时使用的Tag, 那么在新版本开发阶段,每天早上定时使用前一天的最后一次提测Tag 结果与前一版本的版Tag结果进行对比,将对比结果通过对比报告邮件或者办公IM消息发给所有参与新版本的

    1.1K20

    谷歌 Flutter 1.17 发布

    此选项将安装仅依赖于您的插件代码(不包括任何Dart代码资产)的通用Android应用。这允许重复flutter run命令的启动速度更快,因为对Dart代码资产的更改不需要重新构建APK。...另一方面,如果您的Android调试启动时间让您失望,请尝试一下。 如果您以Android为目标,则要注意的另一个变化是,现在创建新的Flutter项目时,AndroidX是唯一的选择。...在上一个版本中,Flutter团队弃用了原始的Android支持,并将其移至AndroidX作为所有新项目的默认设置。...最后但并非最不重要的一点是,如果您发现自己发生Flutter崩溃,这些工具将提示您提交错误。 团队会密切关注这些错误报告的严重性和频率,因此请在出现提示时进行记录。...通过较小的团队和全新的Flutter代码,他们能够比以前更快地重建应用并交付到两个应用商店,从而使MGM的预订转换率提高了9%。

    3.5K10

    Flutter从配置安装到填坑指南详解

    在 Google I/O ’17 上,Google 向我们介绍了 Flutter —— 一款新的用于创建移动应用的开源Flutter是什么呢?...,找一下PowerShell,有时候安装了也可能找不到(我电脑就找不到),那就win + R,输入cmd回车,输入$PSVersionTable,查看powershell版本。...build Flutter构建命令。 channel 列表开关Flutter通道。 clean 删除构建/目录。 config 配置Flutter设置。...然后又是漫长的等待,在下载Material fonts这里出错了,于是我关掉了命令行,重新打开命令行,执行flutter doctor命令。 然后又是失败。。...安卓原生的apk包最多就几M。但是这是debug模式下的apk包,签名打包后的release版本的包很小,大概几兆的样子。

    3.6K40
    领券