Flutter 插件在 Android 下不起作用

iKK*_*iKK 1 plugins android package visual-studio-code flutter

在我的 Flutter App 中,我使用了许多插件。

但是,其中一些在 Android 下根本无法工作(即在 iOS 下它们工作得很好)。

pubspec.yamlFile 中,我有以下打算在 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
Run Code Online (Sandbox Code Playgroud)

我使用 Android SDK 28

我的 Flutter 项目,我创建:

flutter create --org ch.myorg -i swift -a kotlin <my_app_name>
Run Code Online (Sandbox Code Playgroud)

我怎样才能让这些包在 Android 下工作????

  image_picker: ^0.6.0+8
  url_launcher: ^5.0.2
  permission_handler: ^3.1.0
  flutter_downloader: ^1.1.7
Run Code Online (Sandbox Code Playgroud)

我做了以下试验:

  • 打字 flutter clean
  • 打字 flutter packages get
  • 打开 Android Studio 以查看它是否清除了错误 - 但没有机会
  • 迁移到 AndroidX(但这是您可以想象的最大混乱,因为在迁移之前损坏了其他运行良好的包)
  • 我创建了一个全新的 Flutter 项目并且没有添加任何代码(即使用 hello-world 应用程序)并不断向 pubspec.yaml 文件添加包以查看哪些包会导致 Android 版本崩溃。然后对于第一个崩溃,我尝试退回版本以找到任何可能不会崩溃的包版本。但这就像大海捞针……也没有机会……
  • 我去找了包创建者的 GitHub 项目并尝试了他们的示例应用程序(即每个包都有一个示例) - 但同样的问题:Android 不工作!
  • 我创建了一个全新的 Flutter 应用程序,并获取了 package-provider-example main.dart 代码的 main.dart 内容(为了让所有 android\local.properties 等处于 flutter create 给出的正确状态)和然后我将包中的 pubspec.yaml 内容也添加到新的 Flutter 应用程序中,以获得必要的依赖项。但同样,事情: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!
Run Code Online (Sandbox Code Playgroud)

这是让一个包在 Android 下运行的示例 - 我的试用是使用file_downloader链接到包定义):

当我尝试使用该file_downloader软件包时,您会在下面找到神秘的错误日志:

第 1 步:创建一个全新的 Flutter 项目flutter create --org com.myorg -i swift -a kotlin testy

步骤2:填写pubsep.yaml文件内的package-dependencies (即取自package-example)。以下是此包示例的依赖项:

dependencies:
  flutter:
    sdk: flutter
  path_provider: ^0.4.0
  permission_handler: ^3.0.0
  flutter_downloader: ^1.1.7
  cupertino_icons: ^0.1.2
Run Code Online (Sandbox Code Playgroud)

第 3 步:将 main.dart 保留为默认的“hello world”应用程序(即 flutter create 之后的内容...)

因此,与全新的 Flutter create 应用程序相比,我们只更改了一些 pubspec.yaml 依赖项。而依赖是包提供者在他/她的例子中所建议的!

“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)
Run Code Online (Sandbox Code Playgroud)

其他软件包提供的错误略有不同。但它总是与 gradle 问题或 android 不兼容。我需要安装什么 Android 版本?最新的稳定版不是最好的选择吗??我如何找出哪些包版本适合哪个 Android 版本?我怎么能匹配这两个???(并且仍然保持我所有其他包运行)。

在我的奥德赛之后,我想知道,如果涉及到 Android 依赖项,Flutter 是不是有点混乱???

任何有关如何处理此类问题的建议都受到高度赞赏。你如何正常处理 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
Run Code Online (Sandbox Code Playgroud)

这里是 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)
Run Code Online (Sandbox Code Playgroud)

iKK*_*iKK 6

我终于找到了一个解决方案:

接下来的三个步骤展示了如何让剩余的四个依赖项中的两个正常运行。

在底部,还有更多的 Android Studio 步骤需要完成(混合了一些祈祷和手动步骤),以最终让所有四个 bug 正常运行!!!

这是所需的颤振清理步骤:(首先不知道它何时,为什么以及在哪里损坏!):

第 1 步:在我的 flutter SDK 安装文件夹中,我输入了一个终端:

git clean -xfd

git stash save --keep-index

git stash drop

git pull

flutter doctor
Run Code Online (Sandbox Code Playgroud)

第 2 步:在我的 flutter 应用程序文件夹中,我还输入了终端:

flutter packages pub cache repair
Run Code Online (Sandbox Code Playgroud)

第 3 步:在 Visual-Studio-Code 中,我还进行了 Flutter 卸载和 Dart 卸载。并重新安装了两个。我重新启动了 Visual-Studio-Code。

完成这三个步骤后,我得到了 4 个依赖项中的两个,并且我的 Android“hello world”应用程序至少可以编译(除了最后两个错误)。在以下pubspec.yaml依赖项列表中注释掉了在 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
Run Code Online (Sandbox Code Playgroud)

对于两个依赖项(即permission_handlerflutter_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)
Run Code Online (Sandbox Code Playgroud)

现在我又回到了AndroidX迁移的需要,看来。但我真的很害怕这样做,因为它会破坏所有其他运行良好的软件包。

对于错误消息,您建议在这里做什么?我如何让最后两个包也能正常工作(在所有其他包旁边)???


这是最后两个错误的解决方案:

步骤 A:打开 Android Studio

这最好在 VSCode 中完成,方法是右键单击 Flutter 项目中的 /android 文件夹并选择 Open in Android Studio

在此处输入图片说明

步骤 B:按下Make ProjectAndroid Studio 内的锤子,使一些 Android Studio 检查运行...

在此处输入图片说明

步骤 C:等待并祈祷(以便 Android Studio 进行神奇的清洁)

事实证明,Android Studio 并没有真正掌握包兼容性方面的所有错误。因此,我浏览了所有 Gradle 并手动检查了...

a) 最新的 build.gradle 版本(即鼠标悬停在任何 grey'isch gradle 行上将显示最新版本,您可以相应地手动更改)

b) 最新的 Kotlin 版本(要了解哪个 Kotlin 版本是最新的,请到 Android Studio 中的 SDK-manager 并选择 Kotlin。这将显示最新版本。确保在每个 gradle 中相应地集成此版本)

以下是更改位置和更改内容的说明:

在此处输入图片说明

这里有一个关于在何处更改最新 Kotlin 版本的说明:

在此处输入图片说明

通过上述步骤 1-3 和步骤 AC,我获得了在 Android 下运行的所有依赖包。

我希望 Flutter 团队将来能够使这个过程更加透明——我相信他们会的。