Flutter Android混合开发

马上国庆节了!!!!!!!

虽然flutter提供给我们一套十分完善的开发环境,但事实上,在真实的开发中,我们更需要的是如何将flutter集成到我们已有的Android项目。  
可喜可贺,在 最近的 flutter版本中,给我们提供了一套更加方便的工具,让我们在已有项目中集成flutter 。 

flutter version : 1.9.1 
dart version : 2.5 

根据flutter文档,集成进现有项目,并记录在集成过程中遇到的一些问题

1. 集成步骤

1.1 创建flutter module

flutter create -t module --org com.example my_flutter
  通过以上命令,创建了一个名字为 my_flutter 的 module 
或者在 Androidstudio 中创建 flutter module 一样 

1.2 创建或者使用原有Android工程

就是一个普通Android工程,但是要保证 
1. minSdkVersion > 16 
2. java 版本 1.8 
1
2
3
4
5
6
7
8
9
10
android {
defaultConfig {
minSdkVersion 16
}
//...
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}

1.3 使用aar的方式集成flutter

进入我们的 my_flutter module目录 执行 
1
flutter build aar 
正常情况,会在 my_flutter/build/host/outputs/repo... 得到aar文件,正常添加进Android工程即可

1.4 Android工程中使用 flutter

1. activity方式使用
1
2
3
4
5
6
7
8
9
10
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);
}
2. fragment 方式使用
1
2
3
FragmentTransaction tx = getSupportFragmentManager().beginTransaction();
tx.replace(R.id.someContainer, Flutter.createFragment("route1"));
tx.commit();
至此,经过以上几个步骤,完成了Android工程通过aar方式集成flutter的全部流程。正常我们可以运行Android 项目看到以下界面




2. 集成遇到的问题

2.1 设置镜像

在 执行 flutter build aar 的过程中,发现以下错误信息 。 
我在解决此问题过程中发现,虽然使用了 vpn代理工具,还是不可以执行,所以要设置阿里镜像
1
2
3
4
5
6
7
	* What went wrong:
A problem occurred evaluating project ':app'.
> Could not resolve all files for configuration 'classpath'.
> Could not find lint-gradle-api.jar (com.android.tools.lint:lint-gradle-api:26.1.2).
Searched in the following locations:
https://jcenter.bintray.com/com/android/tools/lint/lint-gradle-api/26.1.2/lint-gradle-api-26.1.2.jar

解决方案:

1. 修改 my_flutter/.android/build.gradle .将 google 和 jcenter两个仓库设置为阿里镜像地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
	buildscript {
repositories {
//google()
//jcenter()
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
}

dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
}
}

allprojects {
repositories {
//google()
//jcenter()
maven { url 'https://maven.aliyun.com/repository/google' }
maven { url 'https://maven.aliyun.com/repository/jcenter' }
maven { url 'http://maven.aliyun.com/nexus/content/groups/public' }
}
}
2. flutter sdk 目录下 packages⁩/flutter_tools⁩/⁨gradle⁩找到下 flutter.gradle文件 替换 jcenter 和 maven 仓库 
【也有说,这一步其实不用做修改,我自己再做的过程中也没改,多试试吧】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
buildscript {
repositories {
//jcenter()
//maven {
// url 'https://dl.google.com/dl/android/maven2'
//}
maven{
url 'https://maven.aliyun.com/repository/jcenter'
}
maven{
url 'http://maven.aliyun.com/nexus/content/groups/public'
}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
}
}
至此经过大半天的折腾,总算完成了aar的集成 。 大功告成,来之不易 ~~

参考:

Add Flutter to existing apps