博主想偷懒了,but,还是撑着眼皮来写了哈哈^_^ 废话不说了 我喜欢简单粗暴点的,直接告诉你怎么弄哈
博主的配置环境先来了解下:
- Windows 10 系统 64位 (32位的装不了flutter环境哦)
- android suodio 4.0
- flutter 1.17.4
- dart 2.8.4
步入正题啦,嘿嘿
一 Android原生集成Flutter环境
1.1 在已有的Android原生项目根目录 依次运行以下命令:
//创建 flutter Module
flutter create -t module module_flutter
cd module_flutter
cd .android/
1.2 android 项目 目录下 app/build.gradle 配置
android {
compileSdkVersion 30
buildToolsVersion "30.0.0"
defaultConfig {
applicationId "com.example.companyproject"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
//flutter相关声明
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
1.3 在 android项目 根目录下的 settings.gradle 中添加如下代码
include ':app'
setBinding(new Binding([gradle: this]))
evaluate(new File(
rootDir.path + '/module_flutter/.android/include_flutter.groovy'
))
1.4 在需要接入的项目中引入 flutter module
//导入flutter
implementation project(':flutter')
1.5 别忘记 Sync Now 哦 *_*
到这里,你就可以在Android 的.java类中使用Flutter的相关类了哦 ,接下来就正式介绍下 如何在原生项目中跳入到Flutter中吧
二 Android 接入Flutter的两种方式
2.1 直接跳转到FlutterActivity类的方式 (网上大部分是FlutterView的方式,只适合Flutter 1.12之前的版本,新版本的,找不到类,你们找到了跟我说下哈),
2.1.1建一个FlutterActivity 如下所示
public class MyFlutterActivity extends FlutterActivity {
TextView tv_showTest;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public static NewEngineIntentBuilder withNewEngine(Class<? extends FlutterActivity> activityClass) {
return new NewMyEngineIntentBuilder(activityClass);
}
public static class NewMyEngineIntentBuilder extends NewEngineIntentBuilder {
protected NewMyEngineIntentBuilder(@NonNull Class<? extends FlutterActivity> activityClass) {
super(activityClass);
}
}
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
GeneratedPluginRegistrant.registerWith(flutterEngine);
}
}
2.1.2进入的时候 直接用Intent到该FlutterActivity的方式。如下:
//1.12版本以后的启动flutter方法
Intent intent = MyFlutterActivity.withNewEngine(MyFlutterActivity.class).initialRoute("/route1").build(MainActivity.this);
startActivity(intent);
2.2 已Fragment的方式引入
目前只是简单的引入,具体到项目中如何使用,小伙伴们自己发挥哈
2.2.1 在需要接入的Activity布局文件中 添加一个 占位FrameLayout 如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
2.2.2 在布局中绑定,使用如下:
public class MyFlutterFragmentActivity extends FlutterFragmentActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_flutter_fragment);
FragmentTransaction tx = getSupportFragmentManager().beginTransaction();
FlutterFragment flutterFragment = FlutterFragment.withNewEngine().initialRoute("route1").build();
tx.replace(R.id.fl_container, flutterFragment);
tx.commit();
}
}
目前,博主使用的也就这了,其他的。。哪里不好指哪里吧 ,记录在这里 以后找的话 方便啊 是吧 哈哈