Android kotlin项目导入flutter项目,各种问题汇集

Android studio版本:chipmunk-2021.2.1 patch 1 (部分功能区别于Android studio 4.2)
flutter 版本:2.8.0
java版本 :jdk-11.0.14

一.创建

使用Android Studio来创建,依次点击左上角的File --> New --> New Flutter Project,然后选择Flutter。

创建一.png

点击next 后在编辑以下数值
创建二.png

备注:

二.引入
(1)然后在项目根目录下的setting.gradle文件中配置:
setBinding(new Binding([gradle:this]))
//flutter目录
evaluate(new File(
settingsDir.parentFile,
'element-android-naya/my_flutter/.android/include_flutter.groovy'

))
错误一:setBinding(new Binding([gradle: this]))报错
错误.png

错误原因:当前gradle版本中缺少groovy-all.jar包导致的,目前项目是gradle-7.4.2-all.zip
解决:从C:\Users\sir.gradle\wrapper\dists\gradle-6.7-all\cuy9mc7upwgwgeb72wkcrupxe\gradle-6.7\lib下复制groovy-all-1.3-2.5.12.jar到C:\Users\sir.gradle\wrapper\dists\gradle-7.4.2-all\9uukhhbclvbegdvsww0j0cr3p\gradle-7.4.2\lib下;然后重新打开项目即可

错误二:

Caused by: java.lang.AssertionError: Project :app doesn't exist. To custom the host app project name, set org.gradle.project.flutter.hostAppProjectName= in gradle.properties.. Expression: (appProject != null). Values: appProject = null

错误二.png

原因:你的android项目的主module的名字不是app,官方解释:https://flutter.cn/docs/development/add-to-app/android/project-setup
解决:
在android项目的gradle.properties文件中设置 flutter.hostAppProjectName:
flutter.hostAppProjectName = app_name
其中app_name就是你android项目主module的名字(也是文件夹的名字)。

(2) 在build.gradle中添加
 implementation project(':flutter')
(3) 在AndroidManifest.xml文件中添加

      

   

具体代码:

package im.myapp.app.features;
import android.content.Intent;
import androidx.annotation.Nullable;
import java.util.HashMap;
import java.util.Map;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.android.FlutterView;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.FlutterEngineCache;
import io.flutter.embedding.engine.dart.DartExecutor;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class FlutterPageActivity extends FlutterActivity {
    private FlutterEngine flutterEngine;
    private FlutterView flutterView;
    private static final String CHANNEL_NATIVE = "com.page/element";
    private static final String CHANNEL_FLUTTER = "com.element/flutter";
    private MethodChannel methodChannel;
    @Override
    public void configureFlutterEngine(FlutterEngine mflutterEngine) {

        flutterEngine = mflutterEngine;
        // 设置初始路由
         flutterEngine.getNavigationChannel().setInitialRoute("rupt_msg?{\"action\":\"" + getIntent().getStringExtra("action") + "\",\"weburl\":\"" + getIntent().getStringExtra("weburl") + "\"}");
        //注册
        GeneratedPluginRegistrant.registerWith(flutterEngine);
        // 开始执行dart代码来pre-warm FlutterEngine
        flutterEngine.getDartExecutor().executeDartEntrypoint(
                DartExecutor.DartEntrypoint.createDefault()
        );
        // 缓存FlutterEngine
        FlutterEngineCache.getInstance().put("my_engine_id", flutterEngine);
        methodChannel = new MethodChannel(flutterEngine.getDartExecutor(), CHANNEL_NATIVE);
        methodChannel.setMethodCallHandler((methodCall, result) -> {
            switch (methodCall.method) {
                case "goBack":
                    finish();
                case "saveBack": //缓存点击事件
                    setResult(RESULT_OK);
                    break;
                default:
                    result.notImplemented();
                    break;
            }
        });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 0 && resultCode == RESULT_OK) {
            if (data != null) {
                String message = data.getStringExtra("message");
                Map result = new HashMap<>();
                result.put("message", message);
                // 创建MethodChannel
                MethodChannel flutterChannel = new MethodChannel(flutterEngine.getDartExecutor(), CHANNEL_FLUTTER);
                flutterChannel.invokeMethod("onActivityResult", result);
            }
        }
    }
    @Override
    public void onBackPressed() {
        MethodChannel flutterChannel = new MethodChannel(flutterEngine.getDartExecutor(), CHANNEL_FLUTTER);
        flutterChannel.invokeMethod("goBack", null);
    }
    @Override
    protected void onResume() {
        super.onResume();
        flutterEngine.getLifecycleChannel().appIsResumed();
    }
    @Override
    protected void onPause() {
        super.onPause();
        flutterEngine.getLifecycleChannel().appIsInactive();
    }
    @Override
    protected void onStop() {
        super.onStop();
        flutterEngine.getLifecycleChannel().appIsPaused();
    }
}

完美运行!!!
如果要Android java项目导入flutter项目的话,请参考
https://www.jianshu.com/p/dd882301670d

你可能感兴趣的:(Android kotlin项目导入flutter项目,各种问题汇集)