flutter调用Android工程,Android Flutter混编_Flutter 和 Android 混编以及各种坑

Flutter 开发快,性能好,值得一用,但很多项目已然有成堆的 Native 代码了,如何才能在已有的基础上接入 Flutter 呢?

新建 Flutter 用于混编

这和情况是已经有 Native 项目或是 Native 项目单独开发,想接入一个全新的 Flutter 项目。

使用 flutter create -t module xxx 方法新建 Flutter 项目,当然这里也可以使用菜单的方式新建,File --> New --> New Module --> Flutter Module。

$ cd some/path/

$ flutter create -t module --org com.example my_flutter

这将创建一个 Flutter module,里面包含了 Dart 项目的 lib 文件和一个 .android,.ios 用于编译 Module,宿主 Android App 的环境依赖需要添加 Java8。添加下面代码于宿主 Android App 的 build.gradle,android{} 模块中。

android {

//...

compileOptions {

sourceCompatibility 1.8

targetCompatibility 1.8

}

}

令宿主 Android App 依赖于 Flutter Module。依赖于 Android Archive (AAR)在 Flutter 项目中执行:$ flutter build aar生成文件会在build/host/outputs/repo中:

build/host/outputs/repo

└── com

└── example

└── my_flutter

└── flutter_release

├── 1.0

│ ├── flutter_release-1.0.aar

│ ├── flutter_release-1.0.aar.md5

│ ├── flutter_release-1.0.aar.sha1

│ ├── flutter_release-1.0.pom

│ ├── flutter_release-1.0.pom.md5

│ └── flutter_release-1.0.pom.sha1

├── maven-metadata.xml

├── maven-metadata.xml.md5

└── maven-metadata.xml.sha1

也可以执行flutter build aar --debug生成debug包,进行测试。

此处有第一个坑:生成的 aar 仅包含 Dart 项目本身的内容,若 Dart 项目中引用的库,例如 flutter_boost,库自身也是有对应的 Java/Kotlin 代码的内容,也会生成一个对应的 aar,这些 aar 都要加到宿主 Android App 项目当中方可。

宿主 Android App 添加引用方式:

1 直接复制到对应的 Android 项目app/libs中,接着于build.gradle的dependencies{}中添加:

dependencies {

// ...

implementation(name: ´flutter_release-1.0´, ext: ´aar´)

}

name 为对应添加依赖包的名字,ext为对应依赖包的扩展名,此处为aar。

2 在 app 的build.gradle中添加本地 maven 目录:

// MyApp/app/build.gradle

android {

// ...

}

repositories {

maven {

url ´some/path/my_flutter/build/host/outputs/repo´

// This is relative to the location of the build.gradle file

// if using a relative path.

}

}

dependencies {

// ...

releaseCompile (´com.example.my_flutter:flutter_release:1.0@aar´) {

transitive = true

}

}

也就是把本地生成 aar 的目录加为 maven 地址。debug模式:

// MyApp/app/build.gradle

dependencies {

// ...

debugCompile (´com.example.my_flutter:flutter_debug:1.0@aar´) {

transitive = true

}

}

3 依赖于 Flutter 项目文件

这样可以对 Android 和 Flutter 项目进行一键编译,但需在宿主项目中安装 Flutter SDK。

在宿主项目中将 Flutter 项目以子项目方式引入,后于宿主settings.gradle中添加:

// MyApp/settings.gradle

include ´:app´ // assumed existing content

setBinding(new Binding([gradle: this])) // new

evaluate(new File( // new

settingsDir.parentFile, // new

´my_flutter/.android/include_flutter.groovy´ // new

))

其中settingsDir.parentFile指settings.gradle文件的父文件夹,evaluate(new File(path))中的path既指 Flutter 项目中flutter_project/.android/include_flutter.groovy的位置。setBinding方法和evaluate方法会将 Flutter 项目自身引入到settings.gralde中,即添加include :flutter。此操作也作包含 Flutter 项目引用的所有库,例如:package_info及:video_player等。

在 Android 项目中添加依赖:

// MyApp/app/build.gradle

dependencies {

implementation project(´:flutter´)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值