马上国庆节了!!!!!!!
虽然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目录 执行
正常情况,会在 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