作者:当个里个当 | 来源:互联网 | 2023-08-10 11:20
07-0410:25:08.3971046910469Fflutter:[FATAL:fluttershellplatformandroidplatform_view_androi
07-04 10:25:08.397 10469 10469 F flutter : [FATAL:flutter/shell/platform/android/platform_view_android_jni.cc(61)] Check failed: CheckException(env).
07-04 10:25:08.398 10469 10469 F libc : Fatal signal 6 (SIGABRT), code -6 in tid 10469 (xswadminmanager)
先简要描述下我的状况,相似者对应参考:
我需要调用android本地代码 然后通过jni调用c语言代码,于是创建了flutter插件,在插件目录android项目与运行没有问题,目录如下,/flutter_uhf/example/android/app 这种是android方式测试插件,但是通过flutter方式就会报上面的错误,目录如下/flutter_uhf/example/lib/main.dart。
错误原因:虽然我只在android的libs下添加了armeabi-v7a的so库,但是通过flutter方式运行它会默认给我生成4种类型lib对应的so库,(提醒,如果你使用flutter build apk的话默认只会生成armeabi-v7a的so目录,所以这个bug在release版本的apk上不存在,只存在debug版本,当然你也可以使用 flutter build apk --target-platform=android-arm64来生成arm64的apk)如下:
很显然,我的调试机器匹配上了arm64-v8a导致了错误,理论上只要在插件的android/libs加入arm64-v8a的相应包即可,但遗憾的是我并没用arm64-v8a版本的so库。
于是找到两种解决方案:(推荐使用第二种)
第一种:
android/app/build.gradle defaultConfig 添加如下规则
defaultConfig {
applicationId "com.reading520.xxswadminmanager"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "0.0.1"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk{
abiFilters "armeabi-v7a"
}
}
但是这样还有个问题,libflutter.so不会加入其中,启动就会报错,所有找到armeabi-v7a版本的libflutter.so粘贴到android/libs下,libflutter.so位置如下图
随后就可以按绿色按钮运行程序了。
第二种(推荐使用)如下添加这个参数即可(android-arm请替换车你需要的版本)--target-platform=android-arm,接着应用操作,然后就可以运行了。