按官網(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)建好如圖:

2、給flutter module打aar
打開終端,cd進(jìn)入flutter_library目錄,執(zhí)行
flutter build aar
終端執(zhí)行結(jié)果如圖:

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

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

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的頁面,有知道為什么的朋友請給我留言,非常感謝!