在現(xiàn)有項(xiàng)目中導(dǎo)入Flutter
參考:Google官方文檔 Add-Flutter-to-existing-apps
- Android項(xiàng)目引入flutter module
- 在項(xiàng)目根目錄通過(guò)命令行執(zhí)行
flutter create -t module my_flutter
- 進(jìn)入my_flutter文件夾
$ cd .android/
$ gradlew flutter:assembleDebug
- 在app下的build.gradle添加如下配置
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
- 在setting.gradle里配置
//根目錄
include ':app' // assumed existing content
setBinding(new Binding([gradle: this])) // new
evaluate(new File( // new
settingsDir, // new
'my_flutter/.android/include_flutter.groovy' // new
)) // new
//同級(jí)目錄
include ':app' // assumed existing content
setBinding(new Binding([gradle: this])) // new
evaluate(new File( // new
settingsDir.parentFile, // new
'my_flutter/.android/include_flutter.groovy' // new
)) // new
- 在app下的build.gradle文件添加依賴項(xiàng)目运挫。
ps:此處必須是flutter祖娘,因?yàn)轫?xiàng)目引入的是在.\flutter_module.android下的Flutter庫(kù)
implementation project(':flutter')
- 在原生使用flutter
private void createFlutterView() {
View flutterView = Flutter.createView(MainActivity.this,getLifecycle(),"rount1");
FrameLayout.LayoutParams layout = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
addContentView(flutterView, layout);
}
flutter_boost的使用
- 在flutter的項(xiàng)目pubspec.yaml中添加依賴
flutter_boost: ^0.0.415
- Flutter代碼集成
void main() => runApp(MyApp());
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
///register page widget builders,the key is pageName
FlutterBoost.singleton.registerPageBuilders({
'sample://firstPage': (pageName, params, _) => FirstRouteWidget(),
'sample://secondPage': (pageName, params, _) => SecondRouteWidget(),
});
///query current top page and load it
FlutterBoost.handleOnStartPage();
}
@override
Widget build(BuildContext context) => MaterialApp(
title: 'Flutter Boost example',
builder: FlutterBoost.init(), ///init container manager
home: Container());
}
- Android代碼集成
在Application的onCreate初始化
引入flutter_boost
implementation project(path: ':flutter_boost')
public class MyApplication extends FlutterApplication {
@Override
public void onCreate() {
super.onCreate();
FlutterBoostPlugin.init(new IPlatform() {
@Override
public Application getApplication() {
return MyApplication.this;
}
/**
* get the main activity, this activity should always at the bottom of task stack.
*/
@Override
public Activity getMainActivity() {
return MainActivity.sRef.get();
}
@Override
public boolean isDebug() {
return false;
}
/**
* start a new activity from flutter page, you may need a activity router.
*/
@Override
public boolean startActivity(Context context, String url, int requestCode) {
return PageRouter.openPageByUrl(context,url,requestCode);
}
@Override
public Map getSettings() {
return null;
}
});
}
踩坑
//flutter只提供v7a的so台丛,所以只能配置
ndk {
abiFilters "armeabi-v7a"
}
引入報(bào)錯(cuò)Must be able to initialize the VM.
嘗試在flutter的執(zhí)行g(shù)radle編譯 gradlew assemble