Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 颤振过滤器不生成libflatter.so,适用于所有架构_Android_Flutter_Abi - Fatal编程技术网

Android 颤振过滤器不生成libflatter.so,适用于所有架构

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

在我的flatter应用程序中,我试图生成应该在所有设备上工作的apk,无论是32位还是64位

为此,我在我的build.gradle文件中放了以下几行。但是它看起来并没有产生libflatter。所以所有架构都是如此

    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).