Плагины флаттера не работают под Android - PullRequest
0 голосов
/ 25 мая 2019

В моем приложении Flutter я использую много плагинов.

Однако есть некоторые из них, которые просто не будут работать под Android (то есть под iOS они отлично работают).

Внутри pubspec.yaml Файл У меня есть следующий список пакетов, которые я собираюсь использовать в своем приложении Flutter.

Закомментированные не работают под Android!

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^0.5.2+1
  sqflite: ^1.1.5
  intl: ^0.15.8
  tuple: ^1.0.2
  material_design_icons_flutter: ^3.2.3695
  launch_review: ^2.0.0
  fit_image: ^0.1.2
  datetime_picker_formfield: ^0.1.8
  flutter_screenutil: ^0.5.2
  path_provider: ^1.1.0
  # image_picker: ^0.6.0+8
  # url_launcher: ^5.0.2
  # permission_handler: ^3.1.0
  # flutter_downloader: ^1.1.7
  large_file_copy: ^0.0.1
  flutter_localizations:
    sdk: flutter
  cupertino_icons: ^0.1.2

Я работаю с Android SDK 28

Мой проект Flutter, который я создаю с помощью:

flutter create --org ch.myorg -i swift -a kotlin <my_app_name>

Как заставить эти пакеты работать под Android ????

  image_picker: ^0.6.0+8
  url_launcher: ^5.0.2
  permission_handler: ^3.1.0
  flutter_downloader: ^1.1.7

Я провел следующие испытания:

  • набрано flutter clean
  • набрано flutter packages get
  • открыл Android Studio, чтобы посмотреть, удаляет ли он ошибки - но нет шансов
  • мигрировал на AndroidX (но это самый большой беспорядок, который вы можете себе представить, поскольку испортили другие пакеты, которые работали до миграции)
  • Я создал совершенно новый проект Flutter и не добавил никакого кода (т.е. работаю с приложением hello-world) и продолжаю добавлять пакеты в файл pubspec.yaml, чтобы увидеть, какие пакеты приводят к сбою версии Android. Затем, для первого сбоя, я пытаюсь сделать шаг назад, чтобы найти любую версию пакета, которая может не потерпеть крах. Но это все равно, что найти иголку в стоге сена ... Нет никаких шансов ...
  • Я пошел за проектом GitHub создателя пакета и попробовал их пример приложения (то есть каждый пакет имеет пример) - но та же проблема: Android не работает!
  • Я создал совершенно новое приложение Flutter и взял содержимое main.dart кода main.dart примера поставщика пакетов (для того, чтобы все android \ local.properties и т. Д. Находились в правильном состоянии, заданном флаттером). создать), а затем я добавил содержимое pubspec.yaml из пакета также в новое приложение флаттера, чтобы получить необходимую зависимость. Но то же самое, вещь: Android не работает !! (iOS работает всегда ..)
  • Я удалил Android Studio и переустановил его. Я удалил Flutter и Dart и переустановил его. Нет эффекта ...

Я более чем отчаянно пытаюсь заставить это работать, так как потерял 6 дней, пытаясь заставить эти пакеты Flutter работать под Android ...: (

Любая помощь высоко ценится.

Вот мой flutter doctor -v вывод:

flutter doctor -v
[✓] Flutter (Channel stable, v1.5.4-hotfix.2, on Mac OS X 10.14.5 18F132, locale
    en-CH)
    • Flutter version 1.5.4-hotfix.2 at /Users/user/Documents/flutter
    • Framework revision 7a4c33425d (4 weeks ago), 2019-04-29 11:05:24 -0700
    • Engine revision 52c7a1e849
    • Dart version 2.3.0 (build 2.3.0-dev.0.5 a1668566e5)


[✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at /Users/user/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling
      support)
    • Platform android-28, build-tools 28.0.3
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build
      1.8.0_152-release-1343-b01)
    • All Android licenses accepted.

[✓] iOS toolchain - develop for iOS devices (Xcode 10.2.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 10.2.1, Build version 10E1001
    • ios-deploy 1.9.4
    • CocoaPods version 1.6.1

[✓] Android Studio (version 3.4)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 35.3.1
    • Dart plugin version 183.6270
    • Java version OpenJDK Runtime Environment (build
      1.8.0_152-release-1343-b01)

[✓] VS Code (version 1.34.0)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.0.2

[✓] Connected device (1 available)
    • Android SDK built for x86 • emulator-5554 • android-x86 • Android 9 (API
      28) (emulator)

• No issues found!

Вот пример получения одного отдельного пакета для работы под Android - у меня пробная версия с file_downloader ( Ссылка на определение пакета ):

Ниже вы найдете загадочный журнал ошибок, когда я пытаюсь использовать пакет file_downloader:

Шаг 1: создать совершенно новый проект Flutter с flutter create --org com.myorg -i swift -a kotlin testy

Шаг 2: заполнить зависимости пакета внутри файла pubsep.yaml (т.е. взят из примера пакета). Вот зависимости для этого примера пакета:

dependencies:
  flutter:
    sdk: flutter
  path_provider: ^0.4.0
  permission_handler: ^3.0.0
  flutter_downloader: ^1.1.7
  cupertino_icons: ^0.1.2

Шаг 3: Сохранить main.dart в качестве стандартного приложения "hello world" (т. Е. Что там после создания флаттера ...)

Поэтому мы изменили только несколько зависимостей pubspec.yaml по сравнению со свежим новым приложением Flutter create. А зависимости - это то, что предлагает провайдер пакетов в своем примере!

Приложение "Hello World" прекрасно работает под Android и iOS. Однако добавление нескольких зависимостей pubspec.yaml приводит к сбою Android (iOS работает нормально) ...

Вот журнал ошибок при запуске Android:

* Error running Gradle:
ProcessException: Process "/Users/user/Flutter_applications/01_MyOwn_Flutter_apps/testy/android/gradlew" exited abnormally:
Starting a Gradle Daemon, 5 stopped Daemons could not be reused, use --status for details


FAILURE: Build failed with an exception.

* Where:
Script '/Users/user/Documents/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 200

* What went wrong:
A problem occurred configuring project ':flutter_downloader'.
> Failed to notify project evaluation listener.
   > Could not get unknown property 'android' for project ':flutter_downloader' of type org.gradle.api.Project.
   > Could not find method debugProvided() for arguments [file collection] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 7s
  Command: /Users/user/Flutter_applications/01_MyOwn_Flutter_apps/testy/android/gradlew app:properties

Exited (sigterm)

Другие пакеты доставляют немного другие ошибки. Но это всегда что-то с проблемой gradle или несовместимостью с android. Какую версию Android мне нужно установить? Разве новейшая стабильная версия не является лучшим вариантом? Как узнать, какие версии пакетов подходят для какой версии Android? Как я могу сопоставить два ??? (и все мои другие пакеты продолжают работать).

Интересно, после моей одиссеи, Флаттер - не беспорядок, если речь идет о зависимостях Android ???

Любые предложения о том, как решать такие проблемы, очень ценятся.Как вы обычно поступаете с пакетами Flutter и совместимостью с Android ???


Или вот еще один пример с пакетом image_picker ( от Flutter Team здесь ):

Шаги 1-3 такие же, как указано выше.Все, что я делаю, это создаю приложение hello-world Flutter и добавляем зависимости, как указано в примере пакета:

Здесь зависимости image_picker:

dependencies:
  flutter:
    sdk: flutter
  video_player: 0.5.2
  image_picker: ^0.6.0+8
  cupertino_icons: ^0.1.2

А здесь ошибка Android:

* Error running Gradle:
ProcessException: Process "/Users/user/Flutter_applications/01_MyOwn_Flutter_apps/testy/android/gradlew" exited abnormally:

FAILURE: Build failed with an exception.

* Where:
Script '/Users/user/Documents/flutter/packages/flutter_tools/gradle/flutter.gradle' line: 200

* What went wrong:
A problem occurred configuring project ':image_picker'.
> Failed to notify project evaluation listener.
   > Could not get unknown property 'android' for project ':image_picker' of type org.gradle.api.Project.
   > Could not find method debugProvided() for arguments [file collection] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 0s
  Command: /Users/user/Flutter_applications/01_MyOwn_Flutter_apps/testy/android/gradlew app:properties

Please review your Gradle project setup in the android/ folder.
Exited (sigterm)

1 Ответ

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

Я НАСТОЯЩИМ РЕШЕНИЕ:

Следующие три шага показывают, как получить две из четырех оставшихся зависимостей.

Внизу, есть еще несколько шагов Android Studio, которые нужно выполнить (смешанные с некоторыми молитвами и ручными шагами), чтобы, наконец, запустить все четыре пусковых устройства !!!

Вот шаги по очистке флаттера, которые были необходимы: (понятия не имею, когда, почему и где он изначально испортился!):

Шаг 1: В папке установки моего флаттера SDK я набрал в терминале:

git clean -xfd

git stash save --keep-index

git stash drop

git pull

flutter doctor

Шаг 2: Внутри папки с флаттером я также набрал в терминале:

flutter packages pub cache repair

Шаг 3: Внутри Visual-Studio-Code я также удалил Flutter и Dart. И переустановил два. Я перезапустил Visual-Studio-Code.

Выполнив эти три шага, я получаю две из 4 зависимостей в живом состоянии, и мое приложение «hello world» для Android по крайней мере компилируется (за исключением двух последних ошибок). Два баггера, все еще не работающие под Android, закомментированы в следующем pubspec.yaml списке зависимостей:

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^0.5.2+1
  sqflite: ^1.1.5
  intl: ^0.15.8
  tuple: ^1.0.2
  material_design_icons_flutter: ^3.2.3695
  launch_review: ^2.0.0
  fit_image: ^0.1.2
  datetime_picker_formfield: ^0.1.8
  flutter_screenutil: ^0.5.2
  path_provider: ^1.1.0
  image_picker: ^0.6.0+8
  url_launcher: ^5.0.2
  # permission_handler: ^3.1.0
  # flutter_downloader: ^1.1.7
  large_file_copy: ^0.0.1
  flutter_localizations:
    sdk: flutter
  cupertino_icons: ^0.1.2

Для двух зависимостей (т. Е. permission_handler и flutter_downloader) я теперь получаю новую ошибку при попытке собрать для Android:

* What went wrong:
Execution failed for task ':app:preDebugBuild'.
> Android dependency 'androidx.core:core' has different version for the compile (1.0.0) and runtime (1.0.1) classpath. You should manually set the same version via DependencyResolution

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 3s
*******************************************************************************************
The Gradle failure may have been because of AndroidX incompatibilities in this Flutter app.
*******************************************************************************************
Gradle task assembleDebug failed with exit code 1
Exited (sigterm)

Теперь я вернулся к необходимости AndroidX миграции, кажется. Но я действительно боюсь делать это, потому что это портит все другие хорошо работающие пакеты.

Что вы предлагаете сделать здесь для сообщения об ошибке ?? Как заставить работать два последних пакета (рядом со всеми другими пакетами) ???


Вот решение последних двух ошибок:

Шаг A: Открыть Android Studio

Лучше всего это сделать в VSCode, щелкнув правой кнопкой мыши папку / android внутри вашего проекта Flutter и выбрав Open in Android Studio

enter image description here

Шаг B: Нажмите молоток Make Project внутри Android Studio, чтобы запустить некоторые проверки Android Studio ...

enter image description here

Шаг C: Ждите и молитесь (чтобы Android Studio провела магическое очищение)

Оказывается, что Android Studio не совсем понимает все ошибки в отношении совместимости пакетов. Поэтому я прошел все Gradles и проверил вручную на ...

a) новейшая версия build.gradle (т. Е. При наведении курсора мыши на любую грайльную линию grey'isch отобразится самая новая версия, и вы можете изменить ее соответствующим образом вручную)

b) новейшая версия Kotlin (чтобы узнать, какая версия Kotlin является самой новой, перейдите в SDK-менеджер в Android Studio и выберите Kotlin. Это покажет новейшую версию. Убедитесь, что интегрировали эту версию в каждом Gradle соответственно) * * тысяча семьдесят один

Вот иллюстрация, где и что изменить:

enter image description here

А вот иллюстрация того, где можно перейти на новейшую версию Kotlin:

enter image description here

С ЭТИМИ ШАГАМИ 1-3 И ШАГАМИ A-C, Я ДОБИЛСЯ, ПОЛУЧИВАЯ ВСЕ ПАКЕТЫ ЗАВИСИМОСТИ, РАБОТАЮЩИЕ ПОД АНТРОИД.

Я надеюсь, что команда Flutter сможет сделать этот процесс несколько более прозрачным в будущем - и я уверен, что они это сделают.

...