【问题标题】:Flutter "Add 2 App" Android integration with adjustments to generated .androidFlutter "Add 2 App" Android 集成,调整生成的 .android
【发布时间】:2021-03-02 18:50:59
【问题描述】:

我正在开发一个具有 3 年以上 Kotlin 开发经验的 Android 应用,并希望逐步将其逐个功能迁移到 Flutter。我使用“add 2 app”集成的option B,我依赖于模块的源代码。 Flutter 编写的功能通过FlutterActivityFlutterFragment 集成到原生Android 应用程序中。这对第一个功能非常有用,但是现在我在迁移第二个功能时遇到了问题。第二个功能需要包camerafirebase_ml_vision。现在的问题是camera 要求最小 SDK 为 21,但在.android 中生成的 Android 代码将最小 SDK 设置为 16。此外,firebase_ml_vision 需要初始化 Firebase,这也需要添加到 .android。我正在考虑将.android 添加到VCS 并添加所需的更改,但是这是生成的代码。当flutter clean 被调用并在flutter pub get 上生成时,它会被删除。当 Flutter 更改/删除它时,我必须不断调整生成的代码:(.android 仅托管从 IDE(或命令行)运行 Flutter 项目时启动的“骨架”Android 应用程序。它不是主机已配置 Firebase 的应用程序(旧的本机应用程序)。但是,.android 应用程序用于快速开发周期。如果由于上述限制我不能再使用它,我总是必须启动本机 Android 应用程序(主机) 并失去了 Flutter 的许多好处,例如热重载 :( 有没有人遇到过同样的问题?

更新:

this article 中,他们明确指出不应修改.android 或将其添加到VCS。他们甚至以camera 模块为例。但是,这不起作用,只需几个简单的步骤即可重现:

  1. 创建一个新模块:flutter create --template=module --project-name example
  2. cd example
  3. camera插件添加到pubspec.yaml
  4. flutter pub get
  5. 现在运行 flutter build apk 会导致以下错误:
/Users/sven/Development/example/.android/app/src/main/AndroidManifest.xml Error:
        uses-sdk:minSdkVersion 16 cannot be smaller than version 21 declared in library [:camera] /Users/sven/.pub-cache/hosted/pub.dartlang.org/camera-0.5.8+11/android/build/intermediates/library_manifest/release/AndroidManifest.xml as the library might be using APIs not available in 16
        Suggestion: use a compatible library with a minSdk of at most 16,
                or increase this project's minSdk version to at least 21,
                or use tools:overrideLibrary="io.flutter.plugins.camera" to force usage (may lead to runtime failures)

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:processReleaseManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 21 declared in library [:camera] /Users/sven/.pub-cache/hosted/pub.dartlang.org/camera-0.5.8+11/android/build/intermediates/library_manifest/release/AndroidManifest.xml as the library might be using APIs not available in 16
        Suggestion: use a compatible library with a minSdk of at most 16,
                or increase this project's minSdk version to at least 21,
                or use tools:overrideLibrary="io.flutter.plugins.camera" to force usage (may lead to runtime failures)

【问题讨论】:

  • 你有没有试过把安卓应用的build.gradle(Module: app)上的minSdk改成21然后重新生成?
  • @Ferdinand 你能解释一下“android 应用的 build.gradle”是什么意思吗?只有一个.android 文件夹被删除并在flutter clean && flutter pub get 上生成。
  • 你说你有2个应用,第一个是用kotlin写的,第二个是用flutter写的,我的意思是你在kotlin上改一下,然后重新生成文件。
  • @Ferdinand Android 应用程序已经在 minSDK 21 上,甚至在我添加 Flutter 模块之前。该值对生成的.android 文件夹没有影响,因为 Flutter 模块不知道 Android 应用程序。 Android 应用包含该模块,而不是相反。
  • @SvenJacobs 根据您的屏幕截图,您可以使用 tools:overrideLibrary="io.flutter.plugins.camera" 强制使用(可能导致运行时失败)否则尝试在 Kotllin 中移动所有 camara 类型代码

标签: android flutter


【解决方案1】:

我注意到您面临 2 个问题/问题:

  1. 最小的 android sdk 兼容性不匹配: 可能需要 Flutter 团队进行一些工作才能正确修复(我希望 flutter_module/build.gradle 更有用,但事实并非如此(不是 build/ 中的那个)或.android),但作为一种解决方法,一些:app 模块AndroidManifest.xml 使用uses-sdk 更改将起作用:
<manifest ...>
   <uses-sdk android:targetSdkVersion="29" android:minSdkVersion="21"
             tools:overrideLibrary="com.example.flutter_module, com.example.flutter_module.host"/>
    ...
</manifest>

(我为flutter模块设置了默认的包名,但是你应该用你的包名替换com.example.flutter_module的两个实例。(检查你的build.gradles)。我在这里做的是提高2个flutter的minSDK已添加的模块。您收到的错误消息建议将相机的 minSDK 降低到 16,但这不是一个好主意(相机插件开发人员将其设置为 21 可能是因为他们使用的 API 具有 minSDK 21,例如 camera2) .


  1. 如何在 build.gradle 中设置 firebase/ dependencies 配置?(即 firebase_ml_visionfirebase 'platform specific configuration'):按照说明更改主应用的 app/build.gradleAndroidManifest.xmldoc 是这么说的:

在您现有的外部 Android 应用上而不是在您的 Flutter 模块中执行这些 Android Gradle 文件编辑。


如果您需要更多帮助,请告诉我 :)

【讨论】:

    【解决方案2】:

    android/app/build.gradle 将 minSdkVersion 更改为 21

    【讨论】:

    • 没有android文件夹,只有.android,正如我上面所说,这个文件夹被删除并在flutter clean &amp;&amp; flutter pub get上生成。
    猜你喜欢
    • 2017-12-09
    • 2020-11-17
    • 2018-08-14
    • 2012-09-05
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多