Flutter混編 與Android原生的混編

2021-09-19 07:05:06 字數 2858 閱讀 9924

剛剛在android專案 混編了flutter特意記錄一下

具體的操作可以參考該鏈結flutter 與android原生的混編

這次簡要介紹下具體的流程,以及實際使用用遇到的問題

新建flutter model

注意不是flutter project,因為是要將flutter當做lib去引入android專案裡面,新建的flutter model 在專案的層級上要放到 與android專案相同的層級 例如下圖:

在android專案的 setting_gradle 裡面新增 如下**:

setbinding(new binding([gradle: this]))

evaluate(new file(

settingsdir.parentfile,

'flutter_staff/.android/include_flutter.groovy'

))

setbinding(new binding([gradle: this, mainmodulename: 'airport']))

evaluate(new file(

settingsdir.parentfile,

'flutter_staff/.android/include_flutter.groovy'

))

然後sync下專案,此時專案中會出現很多東西,

implementation project(path: ':flutter')
先說下通常的呼叫方式:

view flutterview = flutter.createview(

mainactivity.this,

getlifecycle(),

"route1"

);framelayout.layoutparams layout = new framelayout.layoutparams(600, 800);

layout.leftmargin = 100;

layout.topmargin = 400;

addcontentview(flutterview, layout);

通過新增fragment的方式去新增,需要在activity的xml檔案裡面新增乙個framelayout

fragmenttransaction fragmenttransaction = getsupportfragmentmanager().begintransaction();

fragmenttransaction.replace(r.id.fl_flutter_view, flutter.createfragment("route1"));

fragmenttransaction.commit();

我用了 boost,他的呼叫方式與其他的不同,他封裝了整個呼叫方式,與activity進行繫結,通過定址的方式去呼叫,以及釋放資源,還提供了頁面傳值,

flutterboostplugin.init(object : iplatform 

/*** get the main activity, this activity should always at the bottom of task stack.

*/override fun getmainactivity(): activity

override fun isdebug(): boolean

/*** start a new activity from flutter page, you may need a activity router.

*/override fun startactivity(context: context, url: string, requestcode: int): boolean

override fun getsettings(): map?

})

其中 pageroute是乙個頁面路由

public class pagerouter 

public static boolean openpagebyurl(context context, string url, int requestcode) else

} catch (throwable t) }}

具體的flutterpageactivity

class flutterpageactivity : boostflutteractivity() 

override fun onregisterplugins(registry: pluginregistry?)

/*** 路由-該名字配置在flutter中,會根據返回的名字開啟相應的flutter頁面

*/override fun getcontainername(): string

}

至此,也就全部搞定了

總結下需要注意的問題:

android專案與flutter model要在同一層級

如果是多渠道打包,需要在flutter module的build.gradle中配置渠道資訊

後續打包遇到的問題debug包正常,release包跳轉flutter頁面崩潰

解決方法:配置flutter混淆

目前也就這些了

flutter混編ios打包生成ipa檔案

flutter整合到原有ios專案上,將專案打包生成ipa檔案,在通過愛思助手或者分發伺服器分發安裝。1,在flutter module專案路徑下,通過以下命令打包,其中 no codesign表示不使用證書簽名,後續會在打包ios專案的時候一起簽名。若沒有加上,則必須開啟該flutter專案配置開...

c 與IDL混編問題

將原有的idl計算模組整合到新的環境中後在計算的時候出錯 attempted to read or write protected memory.this is often anindication that other memory is corrupt.跟蹤 發現getnameddata獲取狀態...

ARC與MRC的混編

ios5.0以後就開始可以使用arc automatic reference counting 自動引用計數 來代替之前的mrc manual reference counting 人工引用計數 使用arc會減少很多 和忘了釋放物件的苦惱。但是事情都有兩面性。使用了arc之後如果你想復用以前寫過的使...