美文网首页
原生安卓工程引入flutter aar

原生安卓工程引入flutter aar

作者: 许先森的许 | 来源:发表于2020-10-21 18:23 被阅读0次

    按官网指示操作记录,顺便解决一些坑。
    https://flutter.dev/docs/development/add-to-app/android/project-setup
    前提:已经拥有一个安卓工程。

    1、在安卓工程中创建一个flutter module

    方法1:命令行方式
    打开终端,cd进入工程目录,执行

    flutter create -t module flutter_library

    创建完记得打开工程根目录的settings.gradle,include一下你的flutter module,并且加上:

    setBinding(new Binding([gradle: this]))
    evaluate(new File(
    settingsDir.parentFile,
    '你的主项目名称/flutterMoudle的名称/.android/include_flutter.groovy'
    ))

    方法2:AS里创建,具体见上面官网。

    创建好如图:


    image.png

    2、给flutter module打aar

    打开终端,cd进入flutter_library目录,执行

    flutter build aar

    终端执行结果如图:


    image.png

    去这个路径下可以找到打出的aar和pom:build/host/outputs/repo/....


    image.png

    打开你想引用的pom文件,比如debug-1.0.pom,这里面的dependency不需要都引用,根据你自己机器cpu的需求去引用,比如不用模拟器就不用引用x86的。


    image.png

    3、在app中引用刚才打好的aar:

    官网会告诉你在app/build.gradle中加入仓库:

     String storageUrl = System.env.FLUTTER_STORAGE_BASE_URL ?: "https://storage.googleapis.com"
          repositories {
            maven {
                url '/Users/xuchun/AndroidProject/kotlinstudy/flutter_library/build/host/outputs/repo'
            }
            maven {
                url '$storageUrl/download.flutter.io'
            }
          }
    

    其实不需要,这样即可:

    repositories {
        maven {
            url 'http://download.flutter.io'
        }
    

    然后再下面的dependencies中加入aar的引用即可:

    implementation project(":flutter")
    implementation 'io.flutter:flutter_embedding_debug:1.0.0-75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d'
        implementation 'io.flutter:armeabi_v7a_debug:1.0.0-75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d'
        implementation 'io.flutter:arm64_v8a_debug:1.0.0-75bef9f6c8ac2ed4e1e04cdfcd88b177d9f1850d'
    

    然后Sync后,aar就引入成功了。

    关于引入aar成功后在原生页面中展示fullter页面的:
    我使用了两种方式,FlutterActivity和FlutterView,只有FlutterActivity成功展示出来了。

    1、FlutterActivity的写法(kotlin):

     bt.setOnClickListener {
                startActivity(
    //引擎缓存
                        FlutterActivity
                            .withCachedEngine("my_engine_id")
                            .build(this)
    //                FlutterActivity.createDefaultIntent(this)//没有引擎缓存
                )
    

    引擎缓存可以让启动FlutterActivity时,Flutter内容的显示延迟大大减少。具体设置方式在上面的官网地址中有。

    2、FlutterView的写法(kotlin):

    override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            setContentView(activity_main)
            setSupportActionBar(toolbar)
            init()
            val flutterEngine = FlutterEngineCache.getInstance().get("my_engine_id")
            val flutterView = FlutterView(this)
            val lp: FrameLayout.LayoutParams =
                FrameLayout.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT,
                    ViewGroup.LayoutParams.MATCH_PARENT
                )
            // 关键代码,将Flutter页面显示到FlutterView
            flutterView.attachToFlutterEngine(flutterEngine!!)
            layout_frame.addView(flutterView, lp)
    
        }
    

    上面代码还是显示不出flutter的页面,有知道为什么的朋友请给我留言,非常感谢!

    相关文章

      网友评论

          本文标题:原生安卓工程引入flutter aar

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