原生安卓工程引入flutter aar

按官網(wǎng)指示操作記錄,順便解決一些坑。
https://flutter.dev/docs/development/add-to-app/android/project-setup
前提:已經(jīng)擁有一個安卓工程。

1、在安卓工程中創(chuàng)建一個flutter module

方法1:命令行方式
打開終端,cd進(jìn)入工程目錄,執(zhí)行

flutter create -t module flutter_library

創(chuàng)建完記得打開工程根目錄的settings.gradle,include一下你的flutter module,并且加上:

setBinding(new Binding([gradle: this]))
evaluate(new File(
settingsDir.parentFile,
'你的主項(xiàng)目名稱/flutterMoudle的名稱/.android/include_flutter.groovy'
))

方法2:AS里創(chuàng)建,具體見上面官網(wǎng)。

創(chuàng)建好如圖:


image.png

2、給flutter module打aar

打開終端,cd進(jìn)入flutter_library目錄,執(zhí)行

flutter build aar

終端執(zhí)行結(jié)果如圖:


image.png

去這個路徑下可以找到打出的aar和pom:build/host/outputs/repo/....


image.png

打開你想引用的pom文件,比如debug-1.0.pom,這里面的dependency不需要都引用,根據(jù)你自己機(jī)器cpu的需求去引用,比如不用模擬器就不用引用x86的。


image.png

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

官網(wǎng)會告訴你在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'
        }
      }

其實(shí)不需要,這樣即可:

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就引入成功了。

關(guān)于引入aar成功后在原生頁面中展示fullter頁面的:
我使用了兩種方式,F(xiàn)lutterActivity和FlutterView,只有FlutterActivity成功展示出來了。

1、FlutterActivity的寫法(kotlin):

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

引擎緩存可以讓啟動FlutterActivity時,F(xiàn)lutter內(nèi)容的顯示延遲大大減少。具體設(shè)置方式在上面的官網(wǎng)地址中有。

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
            )
        // 關(guān)鍵代碼,將Flutter頁面顯示到FlutterView
        flutterView.attachToFlutterEngine(flutterEngine!!)
        layout_frame.addView(flutterView, lp)

    }

上面代碼還是顯示不出flutter的頁面,有知道為什么的朋友請給我留言,非常感謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容