Flutter abiFilters не генерирует libflutter.so для всей архитектуры - PullRequest
0 голосов
/ 24 апреля 2019

В моем приложении Flutter я пытаюсь сгенерировать apk, который должен работать на всех устройствах, будь то 32-битная или 64-битная.

Для этого я поместил следующие строки в мой build.gradle файл. Но похоже, что он не генерирует libflutter.so для всех архитектур.

    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'

Как мы видим на изображении ниже, libflutter.so присутствует только в armeabi-v7a , и во всех других папках его нет. Эта проблема вызывает сбой моего приложения при запуске, когда я выпускаю его в Google Play.

  Exceptions
    java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/abc.xyz.idar-1/base.apk"],nativeLibraryDirectories=[/data/app/abc.xyz.idar-1/lib/arm64, /data/app/abc.xyz.idar-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64, /system/vendor/lib64, /product/lib64]]] couldn't find "libflutter.so"

enter image description here

Я использую команду flutter build apk для генерации apk.

Ответы [ 6 ]

3 голосов
/ 25 апреля 2019

Это известная проблема в хранилище Flutter.Я надеюсь, что они смогут исправить это в ближайшее время.

https://github.com/flutter/flutter/issues/18494.

Я обнаружил, что лучший способ обойти это следовать этому комментарию .

Когдавы запускаете flutter build apk, этот обходной путь удалит все ресурсы в 64-битных папках.Таким образом, 64-разрядное устройство будет использовать ресурсы только в 32-разрядной папке.

1 голос
/ 20 июня 2019

Upgarde / Переключение на основной канал флаттера (если вы его не используете).Проблема решена командой Flutter.Теперь одна команда flutter build apk создаст apk, совместимый как с 32-битной, так и с 64-битной архитектурой.

1 голос
/ 17 июня 2019

Я боролся за эту проблему больше месяца. Наконец, flutter выпустил так называемый PATCH для поддержки поддержки построения 64-битных приложений.

Для построения приложения по его архитектуре используйте flutter SDK версии 1.7.4 или выше . Это все еще в канале разработки, но все работает, как и ожидалось. Вот ссылка для скачивания SDK

Теперь перейдем к основному коду, где происходит вся магия:

НЕ ВКЛЮЧАЙТЕ ЛЮБЫЕ ФИЛЬТРЫ 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
    }
}

Теперь откройте терминал и используйте эту команду в корневом каталоге для генерации Apks

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

Что ж, генерация займет довольно много времени, но это того стоит и работает, лол ... вот несколько выходных журналов для справки.

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).
0 голосов
/ 16 июня 2019

В вашем build.gradle внутри defaultConfig добавьте это:

ndk {
    abiFilters "armeabi", "x86", "armeabi-v7a"
}

Выполнить flutter build apk --release

Отправка файла apk в магазин Play.

0 голосов
/ 23 мая 2019

Вы можете попробовать эту команду для сборки 64-битного apk

flutter build apk --release --target-platform=android-arm64
0 голосов
/ 24 апреля 2019

Измените свой build.gradle следующим образом

android {
   compileSdkVersion 27
   defaultConfig {
      // Remove ndk.abiFilters from here
   }

   buildTypes {
       release {
           ndk.abiFilters 'armeabi-v7a'
       }
   }

Это то, что я использую для выпуска в Google Play, и пока у меня нет проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...