首页后端开发其他后端知识Flutter 和 Android 混编有哪些常见的坑?

Flutter 和 Android 混编有哪些常见的坑?

时间2024-03-28 14:34:03发布访客分类其他后端知识浏览400
导读:相信很多人对Flutter 和 Android 混编有哪些常见的坑都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助 Flutter 开发快,性能好,值得一用,但很多项目已然有成堆的 Native 代码了,如何才能在已有...
相信很多人对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´)
}
    
通过以上内容的阐述,相信大家对Flutter 和 Android 混编有哪些常见的坑已经有了进一步的了解,更多flutter如何和安卓混编的问题,欢迎关注网络或到官网咨询客服。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Flutter 和 Android 混编有哪些常见的坑?
本文地址: https://pptw.com/jishu/655002.html
HTML中的元素居中有哪些方式 想要禁止CoordinatorLayout中滚动AppBarLayout,需要怎么做?

游客 回复需填写必要信息