一、新建 Android 工程

正常新建一个 Android 项目即可。

二、新建 Flutter module

1、新建一个 Flutter Module


Android 项目中集成 Flutter_第1张图片image.png

2、新建完成之后,这个 Flutter Module 也是可以正常运行的。

可以打开 Flutter Module 里面的 android 项目。也就是 .android 文件夹下。


Android 项目中集成 Flutter_第2张图片image.png

里面也是分为了 Android 原生和 Flutter Module 两个部分。如果在原有项目集成 Flutter 的过程中遇到依赖冲突,比如 support 包里面 appcompat 版本冲突等,就需要在 Flutter Module 里面的 Android 工程里,找到 build.gradle 文件进行修改。

Android 项目中集成 Flutter_第3张图片image.pngAndroid 项目中集成 Flutter_第4张图片image.png

三、Android 项目集成 Flutter

Android 原生项目可以通过两种方式依赖 Flutter module。一种是通过 aar 的方式,一种是通过依赖源码的方式。

1、aar 方式集成

1、Android 原工程需要使用 java 8 编译

在 工程的 build.gradle 里面,android {} 下修改

android {  //...  compileOptions {    sourceCompatibility 1.8    targetCompatibility 1.8  }}
2、生成 aar 文件

通过集成 arr 的方式需要先生成 Flutter Module 的 arr,Flutter 官网上是通过在 Flutter Module 的根目录下通过运行

flutter build aar

得到 aar 文件。但是我运行这个命令没有成功。

还有一种方式,是在 android 工程里面,也就是 .android 目录下,执行

gradlew assembleRelease

运行这个命令,也会生成 aar 文件。


Android 项目中集成 Flutter_第5张图片image.png

上面那个 debug 版本的 aar 是运行 module 之后自动生成的,一般不建议使用这个。

3、使用 aar

主工程的 build.gradle repositories 闭包 里面加入

     flatDir {            dirs 'libs'   // aar目录        }

需要注意的是,两处都要添加

buildscript {    repositories {        flatDir {            dirs 'libs'   // aar目录        }        google()        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:3.4.1'                // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }}allprojects {    repositories {        flatDir {            dirs 'libs'   // aar目录        }        google()        jcenter()            }}

复制 aar 文件到 app/libs 里

Android 项目中集成 Flutter_第6张图片image.png

接着 app 的 build.gradle 里面添加依赖

    implementation 'com.example.flutter_module:flutter-release:1.0@aar'

这里的包名替换为自己的。

4、java 代码里面加载 Flutter 页面

布局文件:

<?xml version="1.0" encoding="utf-8"?>        

代码加载 Flutter

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);               FragmentTransaction tx = getSupportFragmentManager().beginTransaction();        tx.replace(R.id.flutter_container, Flutter.createFragment("route1"));        tx.commit();    }}

运行项目,效果:


Android 项目中集成 Flutter_第7张图片f.jpg

2、module 源码方式继承。

1、Android 原工程需要使用 java 8 编译

在 工程的 build.gradle 里面,android {} 下修改

android {  //...  compileOptions {    sourceCompatibility 1.8    targetCompatibility 1.8  }}
2、修改 Android 工程里面的 setting.gradle 文件
// MyApp/settings.gradleinclude ':app'                                     // assumed existing contentsetBinding(new Binding([gradle: this]))                                 // newevaluate(new File(                                                      // new  settingsDir.parentFile,                                               // new  'my_flutter/.android/include_flutter.groovy'                          // new))        

注意 这个路径不要写错了,都修改为自己的路径。上面的路径的意思是,setting.gradle 的父目录下的 有 flutter_module 。

3、android 工程依赖 Flutter module

修改 app 的 build.gradle

dependencies {  implementation project(':flutter')}
4、实现 Android 项目跳转到 Flutter 页面。

这个就和集成 arr 的里面一样了。在 Java 里面有两种方式使用 Flutter Module 。一种就是上面那样使用 Fragment 的方式。还有一种是使用 View 的方式,代码如下:

 View flutterView = Flutter.createView(      MainActivity.this,      getLifecycle(),      "route1"    );    FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(600, 800);    layout.leftMargin = 100;    layout.topMargin = 200;    addContentView(flutterView, layout);

这里可以传递一个参数 "route1",这个参数可以当作路由的名字,Flutter 里根据这个名字返回指定的页面视图。

import 'dart:ui';import 'package:flutter/material.dart';void main() => runApp(_widgetForRoute(window.defaultRouteName));Widget _widgetForRoute(String route) {  switch (route) {    case 'route1':      return SomeWidget(...);    case 'route2':      return SomeOtherWidget(...);    default:      return Center(        child: Text('Unknown route: $route', textDirection: TextDirection.ltr),      );  }}

这样就实现了 Android 原生跳转到 Flutter 页面。

参考:
https://github.com/flutter/flutter/wiki/Add-Flutter-to-existing-apps#make-the-host-app-depend-on-the-flutter-module

更多相关文章

  1. fullScreen时的软键盘监听(非重写Layout方式)
  2. Android设定屏幕只竖屏或只横屏的两种方式
  3. android工程导出成为jar包。
  4. Android cocos2d-x开发(三)之创建Android工程和编译
  5. Android 客户端发送邮件(JMail方式)
  6. Android Activity四种加载方式
  7. Android原生运行uniapp使用5+app创建项目时的SDK集成步骤(一)
  8. Android开源项目第二篇——工具库篇

随机推荐

  1. android 用VideoView播放本地视频文件
  2. 【Android】简单图片浏览器
  3. Android 解决Toast的延时显示问题
  4. Android中编码实现软件界面
  5. Android APP--建立简单的交互界面
  6. Android应用中使用Popupmenu
  7. Android安卓开发官方文档国内镜像
  8. android欢迎界面并执行任务
  9. Android中添加syslog功能
  10. SMS Library in Android