原生安卓工程引入flutter aar

按官网指示操作记录,顺便解决一些坑。
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的页面,有知道为什么的朋友请给我留言,非常感谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。