Flutter 页面添加到 Android 应用

119 阅读1分钟

第一步 创建Android项目

image.png 点击Finish,将Android项目创建完成

第二步 创建 flutter module

在Android项目的根目录中,使用命令行输入以下指令:

flutter create -t module --org com.example my_flutter

image.png
Flutter module 创建成功

第三步 Flutter module 引入 Android项目相关配置

在原生Android项目中

1、在settings.gradle文件中添加以下代码:

include ':app'
setBinding(new Binding([gradle: this]))
evaluate(new File(settingsDir, 'my_flutter/.android/include_flutter.groovy'))

image.png 2、在app文件的build.gradle文件中添加代码:

implementation project(path: ':flutter')

image.png 3、运行时报错Failed to apply plugin class ‘FlutterPlugin’,则将settings.gradle文件中代码修改:

repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)

image.png
4、再运行,MainActivity文件报错,则修改Android项目中的build.gradle文件,添加以下代码:

allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
    }
}

image.png
5、在AndroidManifest.xml文件中添加以下代码:

<activity
    android:name="io.flutter.embedding.android.FlutterActivity"
    android:theme="@style/LaunchTheme"
    android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
    android:hardwareAccelerated="true"
    android:windowSoftInputMode="adjustResize"
    />

其中@style/LaunchTheme 为主题,可以修改为Android主题。

第四步 修改 MainActivity 文件

实现Flutter页面添加到Android应用

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import io.flutter.embedding.android.FlutterActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main)
        FlutterActivity.createDefaultIntent(this);
        startActivity(
                FlutterActivity
                        .withNewEngine()
                        .initialRoute("/")
                        .build(this)
        );
    }
}