Flutter 打包apk后运行错误:couldn't find "libflutter.so"

FLutter 在使用命令:

flutter build apk

打包或者是用Android Studio直接打包如果so配置错误会出现以下问题:

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data
/app/com.cgmcomm.cgmstore-zq4F04l4AacKP5RCViCs2Q==/base.apk"],nativeLibraryDirectories=
[/data/app/com.cgmcomm.cgmstore-zq4F04l4AacKP5RCViCs2Q==/lib/arm64, /data/app
/com.cgmcomm.cgmstore-zq4F04l4AacKP5RCViCs2Q==/base.apk!/lib/arm64-v8a, /system/lib64]]] 
couldn't find "libflutter.so"

主要原因是在flutter.gradle中有这一段配置:

 Path baseEnginePath = Paths.get(flutterRoot.absolutePath, "bin", "cache", "artifacts", "engine")
            String targetArch = 'arm'
            if (project.hasProperty('target-platform') &&
                project.property('target-platform') == 'android-arm64') {
              targetArch = 'arm64'
            }
            debugFlutterJar = baseEnginePath.resolve("android-${targetArch}").resolve("flutter.jar").toFile()
            profileFlutterJar = baseEnginePath.resolve("android-${targetArch}-profile").resolve("flutter.jar").toFile()
            releaseFlutterJar = baseEnginePath.resolve("android-${targetArch}-release").resolve("flutter.jar").toFile()
            dynamicProfileFlutterJar = baseEnginePath.resolve("android-${targetArch}-dynamic-profile").resolve("flutter.jar").toFile()
            dynamicReleaseFlutterJar = baseEnginePath.resolve("android-${targetArch}-dynamic-release").resolve("flutter.jar").toFile()
            if (!debugFlutterJar.isFile()) {
                project.exec {
                    executable flutterExecutable.absolutePath
                    args "--suppress-analytics"
                    args "precache"
                }
                if (!debugFlutterJar.isFile()) {
                    throw new GradleException("Unable to find flutter.jar in SDK: ${debugFlutterJar}")
                }
            }

flutter.gradle路径是

"$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

flutterRoot是本机flutter安装路径

上述代码说明了当目标是 arm64 的时候, 会自动将 64 的 so 打包到 flutter 内, 这里的问题就造成了以前你在自己的 gradle 设置的打包选项和这个同时生效,也就是 v7 v8 的 so 都不进 apk 里了…
解决方案是在app的build.gradle中修改如下:

    defaultConfig {
……


//        ndk {
//            //选择要添加的对应 cpu 类型的 .so 库。
//            abiFilters "arm64-v8a","armeabi", "armeabi-v7a", "x86", "x86_64"
//            // 还可以添加
//        }
打包的时候注释掉defaultConfig中ndk的配置


    }

    buildTypes {
        release {
         ……
            ndk {
                //选择要添加的对应 cpu 类型的 .so 库。
//                abiFilters "armeabi-v7a"
                abiFilters  "armeabi-v7a"
                // 还可以添加
            }
        }
        debug {
            ndk {
                //选择要添加的对应 cpu 类型的 .so 库。
//                abiFilters "armeabi-v7a"
                abiFilters  "armeabi-v7a"
                // 还可以添加
            }
            minifyEnabled false
            signingConfig signingConfigs.release
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倚栏静望

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值