在Android中集成flutter

flutter可能是未来跨平台开发的又一技术框架,那么对于一个app,我们不可能完全用flutter来开发,那么就意味着我们需要在已有的Android代码中去集成flutter。目前这一技术还处于预览状态,并且还要切换flutter的channel为mater分支。如下,官方原话:

那么我们在集成之前需要查看现在flutter处于什么渠道:

我的是处于master分支,如果你以前没改过的话,应该是beta分支,那么可以执行:

flutter channel master

进行切换。

下面正式开始集成Android
首先用Android studio创建一个Android工程,步骤不做介绍了。然后在Android工程的根目录执行一下命令:

flutter create -t module my_flutter

来创建一个flutter的module,成功之后,目录结构如下:

接着我们来修改一下Android功能里的gradle文件:

首先是app的setting.gradle文件,添加如下:

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

目的就是去加载指定目录的include_flutter.groovy文件,那么我们查看一下这个文件:

// Generated file. Do not edit.

def scriptFile = getClass().protectionDomain.codeSource.location.path
def flutterProjectRoot = new File(scriptFile).parentFile.parentFile

gradle.include ‘:flutter‘
gradle.project(‘:flutter‘).projectDir = new File(flutterProjectRoot, ‘.android/Flutter‘)

def plugins = new Properties()
def pluginsFile = new File(flutterProjectRoot, ‘.flutter-plugins‘)
if (pluginsFile.exists()) {
    pluginsFile.withReader(‘UTF-8‘) { reader -> plugins.load(reader) }
}

plugins.each { name, path ->
    def pluginDirectory = flutterProjectRoot.toPath().resolve(path).resolve(‘android‘).toFile()
    gradle.include ":$name"
    gradle.project(":$name").projectDir = pluginDirectory
}

gradle.getGradle().projectsLoaded { g ->
    g.rootProject.afterEvaluate { p ->
        p.subprojects { sp ->
            if (sp.name != ‘flutter‘) {
                sp.evaluationDependsOn(‘:flutter‘)
            }
        }
    }
}

其中最重要的一段代码,就是include ‘:flutter‘,意思就是flutter这个module要参与编译。

接着在app层级(不是project层)的build.gradle文件中添加依赖:

dependencies {
  implementation project(‘:flutter‘)
  :
}

OK配置阶段结束,我们开始先写Android代码,在activity中添加一个button,当我们点击它时,将加载flutter布局,代码如下:

public class MainActivity extends AppCompatActivity {
    private TextView button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                FragmentTransaction tx = getSupportFragmentManager().beginTransaction();
                tx.replace(R.id.container, Flutter.createFragment("route1"));
                tx.commit();

//                View flutterView = Flutter.createView(MainActivity.this,getLifecycle(),"route1");
//                FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(100,100);
//                params.leftMargin = 100;
//                params.topMargin = 200;
//                addContentView(flutterView,params);
            }
        });
    }
}

这里有两种实现方式,一种是使用fragment,一种是使用FlutterView。代码中的route1字符串则是flutter代码中定义的,接下来就开始写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 SomeWidget();
    default:
      return Center(
        child: Text(‘Unknown route: $route‘, textDirection: TextDirection.ltr),
      );
  }
}

class SomeWidget extends StatelessWidget{
  @override
    Widget build(BuildContext context) {
      // TODO: implement build
      return Container(

        width: 100,
        height: 100,
        color: Color(0xFF00FF00),
        child: Center(
          child: Text("hello",textDirection: TextDirection.ltr,),
        ),
      );
    }
}

这里可以看到对rout1的定义。

写到这里代码部分就完成了,然后运行android项目,就可以看到效果了。

原文地址:https://blog.51cto.com/14295695/2396493

时间: 2024-10-12 02:45:30

在Android中集成flutter的相关文章

现有项目中集成Flutter

本文列举了项目开发使用Flutter会遇到的问题,以及如何使用Flutter module在现有项目中集成Flutter,并对其原理进行了分析. 最近在做的一个商业项目,完全的使用Flutter编写的,这其中的坑,只有写过的人才能体会到. 1. 纯Flutter项目的问题 在论述纯Flutter项目问题之前,我先表述下我的观点(仅限于纯Flutter项目,目前时间2018年6月26日,不排除Flutter的发展,让我的观点改观): 对于个人开发者,可以使用纯Flutter去开发App尝鲜: 对于

Android中集成第三方库的方法和问题

声明: 1. 本文参考了网上同学们的现有成果,在此表示感谢,参考资料在文后有链接. 2. 本文的重点在第三部分,是在开发中遇到的问题及解决办法.第一,第二部分为参考网上同学们的成果加以整理而成. 3. 欢迎转载,交流,请尊重作者劳动成果:转载请注明出处,谢谢! Android中使用第三方库可能有两种:Java库.jar和原生库.so/.a,如果只是做上层APK开发,这两种库都可以通过Eclipse集成开发环境进行集成,如果是平台级开发,则都可通过源码集成.本文整理这两种集成方式使用步骤,以下假设

Android中集成第三方支付

常见的第三方支付解决方案 支付宝支付 微信支付 银联支付 Ping++统一支付平台(需要继承服务器端和客户端) 短信支付 支付宝的集成流程 相关资料链接: 支付宝支付指引流程:支付指引流程 支付宝Android端集成流程:Android端集成流程 首先,支付宝支付准备工作 首先登录[支付宝开放平台]http://open.alipay.com/platform/home.htm,创建应用,并给应用添加App支付功能 由于App支付功能需要签约,因此需要上传公司信息和证件等资料进行签约 签约成功后

Android中集成QQ登陆和QQ好友分享及QQ空间分享

extends : http://blog.csdn.net/arjinmc/article/details/38439957 相关官方文档及下载地址: 如果只用分享和登陆,用lite包就可以,体积小 http://wiki.open.qq.com/wiki/mobile/API%E8%B0%83%E7%94%A8%E8%AF%B4%E6%98%8E#1.13_.E5.88.86.E4.BA.AB.E6.B6.88.E6.81.AF.E5.88.B0QQ.EF.BC.88.E6.97.A0.E9

iOS项目中集成Flutter的最新适配升级

如果你在2019年8月之前将Flutter添加到现有iOS项目,本文值得你一看. 在2019年7月30日,合并合并请求flutter / flutter#36793之前Flutter 1.8.4-pre.21, 将Flutter添加到现有的iOS应用程序需要更改Podfile, 并在现有Xcode项目中添加运行脚本构建阶段. 要在此拉取请求之后更新到Flutter,您必须更改Podfile,删除“运行脚本”构建阶段,然后重新生成podhelper脚本. Podfile的改变 以前,需要将以下几行

Android Studio 中集成Opencv环境(包含opencv_contrib部分)

我在上一篇博客中说到了在Android中集成OpenCV,但是那个版本的OpenCV是没有SIFT和SURF算法的,因为这些算法是受专利保护的,所以并没有被包含在预编译库中,所以如果想要使用SIFT和SURF算法,需要自己来编译OpenCV Android SDK.在OpenCV 2.4.x版本中,这些算法被包含在nonfree模块中:从3.0版本开始,用于图像特征匹配的一些算法(比如SIFT,SURF,BRIEF,FREAK等)被转移到了opencv_contrib项目的xfeatures2d

【笔记】android sdk集成的eclipse中导入项目

android sdk集成的eclipse中导入项目 想要把旧的ADT项目,一模一样的导入进来,需要: 1.把项目放到,非当前ADT的workspace目录下: 2.从Project中Import,选择Existing Android Code into Workspace,就可以正常导入了. 3.导入后,右击MainActivity->Refactor -> Rename,即可去把项目名从默认的MainActivity改为你真正的项目的名字.

Android Studio 项目中集成百度地图SDK报Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create:()I错误

Android Studio 项目中集成百度地图SDK报以下错误: 1 java.lang.UnsatisfiedLinkError: Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create)I 2 at com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create(Native Met

Flutter Android 真机器调试 、模拟器调试、Vscode 中开发 Flutter 应用

必备条件: 1.准备一台 Android 手机 2.手机需要开启调试模式 3.用数据线把手机连上电脑 4.手机要允许电脑进行 Usb 调试 5.手机对应的 sdk 版本必须安装 注意: 1.关闭电脑上面的手机助手比如:360 手机助手.应用宝等占用 adb 端口的软件 2.关闭 HBuilder 之类占用 Adb 端口的软件 3.数据线一定要可用(可以用 360 手机助手检测) 二.Flutter 模拟器调试 3.夜神模拟器:https://www.yeshen.com/ 三.Vscode 中开