Flutter 项目:MainActivity.java 文件丢失。

17
我正在尝试在Flutter项目中创建平台通道,以访问Android特定的Java代码。我在Android Studio中创建了一个新的Flutter应用程序项目,并遵循教程,其中提到:

1- 导航至存储Flutter应用程序的目录,并选择其中的android文件夹。单击确定。

2- 在项目视图中,打开位于java文件夹中的MainActivity.java文件。

然而,该项目只包含MainActivity.kt文件,没有Java文件:

enter image description here

我尝试使用上下文菜单>新建>活动手动在Java文件夹内创建一个新的活动,但它无法正常工作。


编辑:

如果您可以创建一个新项目,则最佳解决方案是在设置项目时取消选中“包括 Android 代码的 Kotlin 支持”。这会自动创建 MainActivity.java。对于 Objective-C 和 Swift 也是如此。如果要使用 Objective-C,请取消选中“包括 iOS 代码的 Swift 支持”。

enter image description here


2
当您创建项目时,可以选择Android本地语言。默认语言最近从Java更改为Kotlin。如果您喜欢Java,请在创建新项目时选择它。 - Richard Heap
6个回答

31

如果你在这里是因为正在按照设置firebase_messaging的步骤进行操作,那么你可以查看这个答案,并且只需在你的MainActivity.kt文件旁边创建Application.kt文件即可。以下是示例代码:

package com.example.yourapp

import io.flutter.app.FlutterApplication
import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService

class Application : FlutterApplication(), PluginRegistrantCallback {

    override fun onCreate() {
        super.onCreate()
        FlutterFirebaseMessagingService.setPluginRegistrant(this);
    }

    override fun registerWith(registry: PluginRegistry?) {
        io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin.registerWith(registry?.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
    }
}

16
flutter create -a java .

尝试运行此命令,以'.'结尾。它代表当前项目目录。 从项目根文件夹应用此命令。 此命令将尝试使用Java重新创建Android项目(这将设置您的MainActiviy.java)。 它不会影响当前设置的清单或任何其他Firebase相关设置。


3
如果项目中已经有minactivity.kt文件,则需要手动删除该文件,然后再运行此命令。 - SK. Fuad
我删除了 MainActivity.kt 并创建了一个名为 MainActivity.java 的文件,但现在我的应用程序无法重新构建。 - kalfalarin_omer

7
您可以使用Java代码创建类文件MainActivity.java并删除 Kotlin 文件。这样应该就能正常工作了:
public class MainActivity extends FlutterActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    GeneratedPluginRegistrant.registerWith(this);
  }
}

6
需要导入哪些模块?使用 this 看起来不再正确。 - Alex
导入 io.flutter.embedding.engine.FlutterEngine; 然后 GeneratedPluginRegistrant.registerWith(new FlutterEngine(this)); - Banjoe

5

屏幕截图

创建MainActivity.java并记得将其放在此路径中:Android / App / src / MainActivity.java


2

如果您的项目缺少主活动文件,可以运行以下命令。

flutter create .

以上命令将为您的项目添加所有支持的平台所需的任何缺失文件,包括mainActivity.java。如果您想要更改Android平台语言(例如从Java更改为Kotlin),则可以使用-a标志指定语言。

flutter create -a kotlin .

这将创建一个Kotlin目录,并添加丢失的文件,在结尾处添加一个点表示项目名称不会改变。

注意:如果您的项目目录名称包含(空格,破折号,大写字母),则此命令将无法正常工作,它必须严格为小写并用下划线分隔而不是空格。


1
默认情况下,Flutter 的 Android 语言是 Kotlin,但您可以在创建 Flutter 项目时使用以下技术来更改它:
1.

When you are creating a Flutter project in the Android Studio

或者您可以使用以下命令: flutter create -a java

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接