Flutter默认生成Kotlin类而非Java类,如何配置使用Java?
我太懂这种踩坑的憋屈感了——明明已经想着禁用Kotlin用Java,结果新项目还是自动生成Kotlin的MainActivity,折腾半天都没搞定。别慌,下面分新建项目和已创建项目两种场景,给你一步步捋清楚配置方法:
一、新建项目时直接指定Java语言(从根源避免问题)
如果你还没创建项目,或者打算重新建一个,直接用以下方式就能确保生成Java的MainActivity:
方式1:命令行创建
打开终端,执行创建命令时明确指定Android语言为Java:
flutter create --platforms android --android-language java your_project_name
这样生成的项目里,Android端默认就是Java的MainActivity,不会有任何Kotlin文件。
方式2:Android Studio图形界面创建
在Android Studio中选择New Flutter Project后,到Platforms步骤:
- 确保勾选需要的平台(至少选Android)
- 找到
Android language选项,直接选择Java,而非默认的Kotlin - 完成后续步骤,生成的项目就会是Java环境的Android端。
二、已创建的项目改为Java环境(修复现有项目)
如果已经创建了项目,默认生成了Kotlin的MainActivity,按以下步骤修改:
1. 删除Kotlin的MainActivity文件
找到路径:android/app/src/main/kotlin/[你的包名]/MainActivity.kt,直接删除这个文件和对应的kotlin目录(如果里面没有其他文件的话)。
2. 创建Java版的MainActivity
在路径android/app/src/main/java/[你的包名]/下,新建MainActivity.java文件,粘贴以下标准代码(注意替换成你的包名):
package com.yourpackage.name; // 这里改成你自己的包名 import io.flutter.embedding.android.FlutterActivity; public class MainActivity extends FlutterActivity { }
3. 修改AndroidManifest.xml配置
打开android/app/src/main/AndroidManifest.xml,确保activity标签的android:name指向你新建的Java类,比如:
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <!-- 其他内容保持不变 --> </activity>
4. 移除Android端的Kotlin相关配置
打开android/app/build.gradle文件,做以下修改:
- 移除顶部的Kotlin插件:删除
id 'kotlin-android'这一行 - 移除dependencies中的Kotlin依赖:如果有
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"这类代码,直接删除 - 确认sourceSets配置中包含Java路径(一般默认已经有,无需修改):
sourceSets { main.java.srcDirs += 'src/main/java' }
5. 清理并重建项目
在终端执行以下命令,确保缓存清理干净:
flutter clean flutter pub get flutter run
小提示
如果修改后还是报错,检查一下包名是否完全一致——Java文件的包名、AndroidManifest里的包名,还有build.gradle里的applicationId必须统一,不然会找不到Activity类。
内容的提问来源于stack exchange,提问作者adnan ijaz

