开头
在flutter开发中,始终会有下面两个无法避免的问题:
- 原生项目往flutter迁移,就需要在原生项目中接入flutter
- flutter项目中要使用到一些比较成熟的应用,就无法避免去用到原生的各种成熟库,比如音视频之类的
这篇文章,将会对上面两种情况,分别进行介绍
在Android中接入flutter界面
在android项目中需要将flutter以module的形式接入
创建flutter module
进入当前android项目,在根目录运行如下命令:
flutter create -t module my_flutter
上面表示创建一个名为 my_flutter
的flutter module
之后运行
cd my_flutter
cd .android/
./gradlew flutter:assembleDebug
同时,确保你的在你的android项目目录下 app/build.gradle
,有添加如下代码:
android {
compileSdkVersion 28
defaultConfig {
...
}
buildTypes {
...
}
//flutter相关声明
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
接着,在 android项目 根目录下的 settings.gradle
中添加如下代码
include ':app'
setBinding(new Binding([gradle: this]))
evaluate(new File(
rootDir.path + '/my_flutter/.android/include_flutter.groovy'
))
最后,需要在android项目下的 app/build.gradle
中引入 my_flutter
dependencies {
...
//导入flutter
implementation project(':flutter')
}
到这里,基本上就可以开始接入flutter的内容了
不过这时候还有一个问题需要注意,如果你的android项目已经迁移到了androidx,可能你会遇到下面的这种问题
这种问题明显是因为flutter创建moudle时,并未做到androidx的转换,因为创建moudle的命令还不支持androidx
可以查看下面这个issue
Generated Flutter Module Files Do Not Use AndroidX
下面就开始解决这个问题
解决androidx带来的问题
首先,如果你原先的android项目已经迁移到了androidx,那么在根目录下的 grale.properties
一定有如下内容
# 表示使用 androidx
android.useAndroidX=true
# 表示将第三方库迁移到 androidx
android.enableJetifier=true
下面进入到 my_flutter 目录下,在 你的android项目/my_flutter/.android/Flutter/build.gradle
中对库的依赖部分进行修改
如果默认的内容如下:
dependencies {
testImplementation 'junit:junit:4.12'
implementation 'com.android.support:support-v13:27.1.1'
implementation 'com.android.support:support-annotations:27.1.1'
}
将所有依赖修改为androidx的版本: