繁体   English   中英

将现有的 Flutter Kotlin 项目转换为 Flutter ZD52387880E1EA22817A72D375921381 项目

[英]Convert an existing Flutter Kotlin project to Flutter Java project

I created a Flutter project using default values, which are Kotlin for Android and Swift for iOS. 在项目进行到一半时,我需要集成需要 Java 的第 3 方 Android SDK。 我可以在创建后将 Flutter 项目转换为 Java 用于 Android 吗?

我知道我需要你使用平台通道将本机代码与我的 Flutter 应用程序集成,这不是我关心的问题。

我有同样的问题,对我来说这个解决方案有效。

  1. 从 android/app/src/main/kotlin -> android/app/src/main/java 移动文件夹 com.example.test_app(你有的任何名称)
  2. 将 MainActivity.kt 替换为 Java 版本,或者在这里复制下来

    package com.example.test_app; import androidx.annotation.NonNull; import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.plugins.GeneratedPluginRegistrant; public class MainActivity extends FlutterActivity { @Override public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { GeneratedPluginRegistrant.registerWith(flutterEngine); } }
  3. 删除以下代码 android/app/build.grandle

     ... apply plugin: 'kotlin-android'... sourceSets { main.java.srcDirs += 'src/main/kotlin' }
  4. 在同一个地方替换以下内容:

     dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.1.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' }

    dependencies { testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }

By default flutter template supports writing Android code using Kotlin, or iOS code using Swift. 要使用 Java 或 Objective-C,请使用 -i 和/或 -a 标志:

在终端运行中: flutter create -i objc -a java your_project_name

如果您想更改现有的应用程序平台语言选择,作为一种解决方法,您可以删除 android/ 目录并运行flutter create -a java以获取为新语言选择重新创建的目录(对于 ios/ 和 Swift 相同)。 您需要重新应用自定义更改。

运行flutter create -a java. 在您的项目目录中

flutter 创建:如果在已经存在的项目上运行,这将修复项目,重新创建丢失的所有文件。

如果它只包含生成的示例代码,请删除android/src/main中的kotlin目录

如果您从 cmd 创建一个新项目:

flutter create -i objc -a java project_name

注意:-a 表示 android 标志,-i 表示 ios 标志。 如果你只想要 java,你可以去掉-i objc

如果要转换现有项目:

flutter create -a java.

转换现有项目时,上述行末尾有一个点

Just wanted to follow up with this, as I had to change the default language in my Flutter project from Kotlin to Java today, and ran into a little pain point, where I found that running flutter create -i swift -a java. 在我的项目目录中工作,但导致我的项目名称根据它所在的目录而更改,如果该目录名称是我的“包名称”的最后一个值(即:com.flutter.app 并且目录是“ app"),然后抛出D8: Program type already present:编译时出错。

这是由于原始 Kotlin src 的 MainActivity。 我发现我必须(在将我的源代码签入我想在 package 名称中使用的这个“app”文件夹之后) ,首先删除这个现有的android/app/src/main/kotlin文件夹,然后运行flutter create -i swift -a java. 命令。

请注意,我没有向 Kotlin 文件夹添加任何唯一代码,因此无需担心删除此文件夹。

希望这可以帮助其他遇到类似问题的人。

以防万一在尝试执行操作,您发现无法生成 java class,建议和导航声明不出现等,

右键单击 java 文件夹,将目录标记为 > 源根目录。 Then, edit your java class by open new android studio window by choose android directory

参考: 为什么 Android Studio 不允许我创建 Java 类?

我也在 Kotlin /Flutter 上。

使用最新的 Firebase Flutter 重写,不再需要大多数 kt 文件。 切换到 v2 嵌入,使用 Kotlin 并不重要...

https://firebase.flutter.dev/docs/migration/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM