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。

点击next 后在编辑以下数值

备注:
二.引入
(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]))报错

错误原因:当前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=<project-name>
in gradle.properties.. Expression: (appProject != null). Values: appProject = null

原因:你的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文件中添加
<activity
android:name=".features.FlutterPageActivity"
android:theme="@style/FlutterPageTheme"
android:exported="false" />
<activity
android:name="io.flutter.embedding.android.FlutterActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:theme="@style/AppTheme"
android:windowSoftInputMode="adjustResize" />
具体代码:
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<String, Object> 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
网友评论