環(huán)境安裝完成后,創(chuàng)建了一個flutter工程,云行到真機(jī)沒報錯,說明我們的操作沒有任何問題了。那么就進(jìn)入到再現(xiàn)有工程中加入flutter這一步了。
現(xiàn)有工程加入flutter有兩種:
1、將flutter工程builder成一個aar,Android直接引入。好處就是不用接觸代碼,壞處是調(diào)試不方便,畢竟沒源碼方便。這個適合有專門開發(fā)flutter的公司吧,分工明確。
2、建立一個flutter的module,最后引入。
下面就來記錄這個第二種。
步驟
1、創(chuàng)建flutter module。以前的Android studio可以直接新建,如圖:

但是現(xiàn)在北極狐版本這個選項藏得很深,看下圖:



第二種命令方式,打開終端,Windows的話是打開powershell。輸入命令cd。移動到現(xiàn)有安卓工程的同一級目錄。我這里是如下
cd D:\AndroidStudioProjects
然后在同級目錄創(chuàng)建flutter工程
flutter create -t module --org com.test my_flutter
--org com.test的意思是設(shè)置包名,注意不要和主工程包名相同。my_flutter是flutter依賴庫的名字,這里就和官網(wǎng)一個名了。
當(dāng)然,有人說這是不支持AndroidX的,要支持AndroidX要用
flutter create --androidx -t module --org com.test my_flutter
說實話剛開始我還信,但是始終執(zhí)行不了,報Androidx命令報錯

經(jīng)過實踐和官網(wǎng)證明,后面的版本不分Androidx了。直接創(chuàng)建就行。
2、創(chuàng)建完成后,進(jìn)入原有Android工程的setting.gradle文件下在最后加上
setBinding(new Binding([gradle: this]))
evaluate(new File(
settingsDir.parentFile, // 項目同級目錄的File路徑
'my_flutter/.android/include_flutter.groovy'
))

這里binding爆紅不要管。注意一點settingsDir.parentFile,如果flutter依賴庫不是和原有工程同一級的那么要去掉parentFile,如果是同一級就要加上。
3、然后在app的gradle中引入
implementation project(':flutter')
注意,是flutter不是我們剛建的my_flutter。
4、我們點擊sync project,結(jié)果報錯了。
Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin class 'FlutterPlugin'.

然后就懵逼了,官網(wǎng)上也沒說這個報錯啊,怎么解決呢?最后在國外論壇找到答案了,RepositoriesMode模式要變,默認(rèn)的模式是FAIL_ON_PROJECT_REPOS,現(xiàn)在改成PREFER_PROJECT
FAIL_ON_PROJECT_REPOS
表示如果工程單獨設(shè)置了倉庫,或工程的插件設(shè)置了倉庫,構(gòu)建就直接報錯拋出異常
PREFER_PROJECT
表示如果工程單獨設(shè)置了倉庫,就優(yōu)先使用工程配置的,忽略settings里面的
PREFER_SETTINGS
表述任何通過工程單獨設(shè)置或插件設(shè)置的倉庫,都會被忽略
但是這樣改了以后,那么原來setting.gradle下面設(shè)置的全局配置就沒用了,如下圖:

新版的AS把全局配置放到了setting.gradle中。那解決辦法也好辦,再把這些配置全搬回到主工程目錄下的gradle就行。如圖:

allprojects {
repositories {
//谷歌maven鏡像start
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/google' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/gradle-plugin' }
//谷歌maven鏡像end
google()
mavenCentral()
maven { url 'https://jitpack.io' }
jcenter() // Warning: this repository is going to shut down soon
}
}
點擊sync now一下,完美?,F(xiàn)在就能運行了。那么怎么跳轉(zhuǎn)到flutter呢?
1、清單文件加入activity
<activity
android:name="io.flutter.embedding.android.FlutterActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize"
/>
2、點擊按鈕跳轉(zhuǎn)
//跳轉(zhuǎn)到flutter頁面
startActivity(
FlutterActivity
.withNewEngine()
.initialRoute("route1")
.build(this)
);
