目錄
- 背景
-
- 建立Flutter Module
- 依賴引入
- 進行flutter 調用
- 進行Flutter 代碼開發調試
- 遇到的問題
- 參考連結
背景
随着Flutter的不斷完善,逐漸有更多的功能可以考慮使用Flutter 來實作,開發的過程就會發現,我們肯定不能抛棄原有的APP的所有功能進行重寫,一般都是針對一些新的業務場景使用Flutter 來實作,這就不可避免的會遇到如果使用Flutter與Android 和iOS進行混合開發的問題。本文會介紹一下Android端開發Flutter的整個流程。
建立Flutter Module
混合開發的模式,我們首先需要建立一個Flutter Module,Flutter Module的建立有兩種方式:
- AS直接建立
File–>New Module,選擇FlutterModule,Module的存放位置可以根據你自己的需求進行存放。這裡在app 同一層級,建立了一個叫android_module的來存放。![]()
原生工程內建Flutter背景
依賴引入
- 修改setting.gradle 檔案,進行依賴引入
setBinding(new Binding([gradle: this]))
evaluate(new File(
settingsDir,
'/android_module/flutter_module/.android/include_flutter.groovy'
))
rootProject.name='FlutterMix'
include ':flutter_module'
project(':flutter_module').projectDir = new File('/android_module/flutter_module')
其中,setBinding與evaluate表示允許Flutter子產品包括它自己在内的任何Flutter插件,在settings.gradle中以類似 :flutter、package_info的方式存在。sync 之後,會在如下路徑,會有一個Flutter 檔案夾生成。![]()
原生工程內建Flutter背景
- 修改build.gradle進行依賴
在dependencies下面增加如下配置:這裡介紹一下,之是以要叫flutter,是因為跟上面第二步生成的Flutter 檔案夾保持一緻。另外,在android 标簽增加使用java8來進行編譯
implementation project(path: ':flutter')
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
進行flutter 調用
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FlutterView flutterView = Flutter.createView(this, getLifecycle(), "initialRoute");
setContentView(flutterView);
}
}
![]()
原生工程內建Flutter背景
進行Flutter 代碼開發調試
使用AS打開module 工程。退出引用程式,然後點選Flutter attach,打開你的應用程式,等待連接配接上即可。就能夠像正常開發一樣調試flutter代碼了。![]()
原生工程內建Flutter背景
遇到的問題
如果你也是通過AS新建立的Demo工作來實踐,可以會遇到相關依賴包找不到的問題,這個是因為你之前已經選擇過工程支援androidx,新建立的預設都使用androidx的方式來進行相關的support支援。但是建立的Flutter 工程,還是使用的是普通的導入,删除其相關的導入,換成androidx的即可。
參考連結
1、https://developer.android.com/jetpack/androidx/releases/lifecycle
2、https://flutter.dev/docs/development/add-to-app/android/project-setup