Android 颤振过滤器不生成libflatter.so,适用于所有架构
在我的flatter应用程序中,我试图生成应该在所有设备上工作的apk,无论是32位还是64位 为此,我在我的build.gradle文件中放了以下几行。但是它看起来并没有产生libflatter。所以所有架构都是如此Android 颤振过滤器不生成libflatter.so,适用于所有架构,android,flutter,abi,Android,Flutter,Abi,在我的flatter应用程序中,我试图生成应该在所有设备上工作的apk,无论是32位还是64位 为此,我在我的build.gradle文件中放了以下几行。但是它看起来并没有产生libflatter。所以所有架构都是如此 android { compileSdkVersion 27 defaultConfig { appId "com.google.example.64bit" minSdkVersion 15
android {
compileSdkVersion 27
defaultConfig {
appId "com.google.example.64bit"
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName "1.0"
ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
如下图所示,libflatter.so仅出现在armeabi-v7a中,所有其他文件夹都缺少它。当我在Google Play上发布我的应用程序时,这个问题使它在启动时崩溃
我正在使用颤振构建apk命令生成apk。像这样更改build.gradle
android {
compileSdkVersion 27
defaultConfig {
// Remove ndk.abiFilters from here
}
buildTypes {
release {
ndk.abiFilters 'armeabi-v7a'
}
}
这就是我在Google Play上发布的内容,到目前为止我还没有遇到任何问题。这是颤振存储库中目前已知的问题。我希望他们能尽快解决这个问题 我发现最好的办法就是遵循这个
运行
flatterbuildapk
时,此解决方案将删除64位文件夹中的所有资源。因此,64位设备将只使用32位文件夹中的资源。您可以尝试使用此命令来构建64位apk
flutter build apk --release --target-platform=android-arm64
在defaultConfig中的
build.gradle
中添加以下内容:
ndk {
abiFilters "armeabi", "x86", "armeabi-v7a"
}
运行flatter build apk——发布
将apk文件发送到Play store。我为这个问题苦苦挣扎了一个多月。最后,Flatter发布了一个所谓的补丁,以支持64位应用程序构建支持
要根据其体系结构构建应用程序,请使用FlatterSDK版本1.7.4或更高版本。它仍在开发频道中,但一切正常。这里是下载的链接
现在让我们来看看主代码,在这里所有的魔术都发生了:
不要在GRADLE文件中包含任何ABI过滤器以生成拆分APK
defaultConfig {
applicationId "YOUR.PACKAGE.NAME"
minSdkVersion 19
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
signingConfig signingConfigs.debug
minifyEnabled false
}
}
现在打开终端并在根目录上使用此命令生成APK
\\PATH_TO_YOUR_FLUTTER_SDK_DIR\bin\flutter build apk --split-per-abi
例如,在我的案例中:
D:\flutter_windows_v1.2.1-stable\flutter_v1.7.4-dev\flutter\bin\flutter build apk --split-per-abi
嗯,这将需要相当长的时间来生成,但它值得和工程lol。。。以下是一些输出日志,仅供参考
Running Gradle task 'assembleRelease'... Done 139.7s (!)
Built build\app\outputs\apk\release\app-armeabi-v7a-release.apk (10.0MB).
Built build\app\outputs\apk\release\app-arm64-v8a-release.apk (10.3MB).
向上/切换到颤振主通道(如果不使用)。该问题由Flatter团队解决。现在,一个命令flatter build apk
将生成与32位和64位体系结构兼容的apk。当我将release块放在android块中时,当我运行flatter build apk时,gradle构建失败。评估项目时出现问题“:应用程序“”>找不到参数[build_7ydgmn6mc1qyEgyvt3fid2vs$\u run_closure2]的方法release()$_closure7@44a36f4c]在com.android.build.gradle.internal.dsl.BaseAppModuleExtension类型的对象上。@Sam I更新了答案。Release需要嵌套在BuildTypes中我试过了,但它仍然没有创建libflatter.so除了armeabi-v7a之外的任何文件夹。这完全可以。只有一个lib文件夹(armeabi-v7a),它将使apk与32位和64位体系结构兼容。那么x86_64和x86呢?它会在那里崩溃吗?我需要生成并上传两个APK吗?一个用于arm64-v8a,另一个用于armeabi-v7a?当我做颤振构建apk时,它只使用armeabi-v7a生成apk。@Sam,现在没有。但从2019年8月开始,谷歌要求APK具备64位支持。因此,从那时起,您需要生成两个APK:32位和64位,并将两个APK上传到Google store。您还可以生成一个AAB(Android应用程序包)flatterbuildappbundle
,并将其上传到谷歌商店。但是,我不知道后面的选项是否真的适用于颤振。谢谢你的时间和帮助。我的应用程序现在没有崩溃。希望他们能在不久的将来解决这个问题,因为我可以看到它没有分配给任何人:-)一些用户报告应用程序仍然在他们的手机上崩溃。我认为这是86位的设备。你知道怎么办吗?@Sam:你找到解决办法了吗。我需要生成x86体系结构应用程序,但由于缺少libflight.sow,该应用程序一直崩溃,1.7.4运行良好,感谢更新人员。已保存DayPaint。dart:1657:15:Context:找到此候选项,但参数不匹配。这给了我一个错误:(我在Windows机器上使用Android Studio。我如何升级/切换到主频道。此外,此命令将生成我可以立即上载的单个apk?是的,此命令将生成单个apk文件。使用命令“颤振主频道”切换。对于升级,它是“颤振升级”我切换到主频道并升级了Flatter。然后我尝试了该命令,但它仍然没有为其他体系结构创建libflatter.so文件。我只能在armeabi-v7a下找到它,这就是应用程序在启动时崩溃的原因。请运行“Flatter clean”清理构建,然后重试。
Running Gradle task 'assembleRelease'... Done 139.7s (!)
Built build\app\outputs\apk\release\app-armeabi-v7a-release.apk (10.0MB).
Built build\app\outputs\apk\release\app-arm64-v8a-release.apk (10.3MB).