美文网首页
旧Android项目集成flutter 遇到的问题

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

作者: 京哥 | 来源:发表于2022-05-01 13:10 被阅读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,便不再崩溃!

    相关文章

      网友评论

          本文标题:旧Android项目集成flutter 遇到的问题

          本文链接:https://www.haomeiwen.com/subject/bhfpyrtx.html