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
}
}