旧Android项目集成flutter 遇到的问题

2022-05-01  本文已影响0人  京哥

在Android 项目集成flutter的时候遇到的一些坑,给大家分享一下。
首先在选择集成flutter的方式,我本地安装了flutter环境,所以采用源码依赖的方式,编辑器是Android studio。
不知道是studio哪个版本之前,可以直接在编辑器Filer ->new module 中 直接新建flutter module,但是我现在的Android studio 版本(2020 fox 版本)在file-> new module 中已经没有直接新建flutter module的选项了:


image.png

所以就按照flutter文档上教程直接 手动创建flutter module:
打开终端,你可以cd 到你项目的同级目录创建,也可以在项目目录内向创建,但是后面在settings.gradle 里路径有所不同,后面会提到区别

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

"com.example" 是你flutter的包名,不能与主项目包名一样, “my_flutter”这个的名称随便取,但要和之后在settings.gradle里的路径名一样
执行完上面的命令后,你会在你项目的同级目录或项目内看到flutter module文件夹


项目同级目录
在项目内目录

将 Flutter 模块作为子项目添加到宿主应用的 settings.gradle 中:“ my_flutter” 名是刚才所创建的flutter module名称:

setBinding(new Binding([gradle: this]))                                // new
evaluate(new File(                                                     // new
  settingsDir.parentFile,  // 项目同级目录的File路径
  'my_flutter/.android/include_flutter.groovy'                         // new
)) 

!这里注意:如果你是在项目内创建的flutter module,那么Flie路径要去掉‘.parentFile’,否则找不到module:

setBinding(new Binding([gradle: this]))                                // new
evaluate(new File(                                                     // new
  settingsDir,   // 项目内的目录的File路径
  'my_flutter/.android/include_flutter.groovy'                         // new
)) 

然后Sync 同步项目,然后在app的build.gradle里引入flutter module

dependencies {
  implementation project(':flutter')
}

至此集成完毕。
2、接下来在运行项目时的问题:
Could not resolve io.flutter:flutter_embedding_debug:1.0.0-57d3bac3dd5cb5b0e464ab70e7bc8a0d8cf083ab.


image.png

原因是我开着vpn梯子,关闭vpn后运行正常!
3、辛苦完成集成并成功运行项目后,接着在打开flutter Activity时又出现问题了:、
首先在AndroidManifest.xml 注册flutter

<activity
  android:name="io.flutter.embedding.android.FlutterActivity"
  android:theme="@style/LaunchTheme"
  android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
  android:hardwareAccelerated="true"
  android:windowSoftInputMode="adjustResize"
  />

确保使用如下的语句导入:

import io.flutter.embedding.android.FlutterActivity;

然后打开flutterActivity:

   startActivity(
      FlutterActivity
        .withNewEngine()
        .initialRoute("/my_route")  //没有路由可以去掉这句
        .build(currentActivity)
      );

结果程序崩溃:
java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/core/view/WindowInsetsControllerCompat;


image.png

谷歌查了查适配Androidx问题:


image.png

在这个地方的useVersion改成1.2.0以上,我目前使用的是1.7.0

if (details.requested.group == 'androidx.core') {
       details.useVersion "1.7.0"
}

然后Sync 同步后,再次打开flutterActivity,便不再崩溃!

上一篇下一篇

猜你喜欢

热点阅读