flutter集成到現(xiàn)有工程問題記錄

環(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可以直接新建,如圖:


image.png

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


image.png

image.png

image.png

第二種命令方式,打開終端,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命令報錯


image.png

經(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'
))

image.png

這里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'.
image.png

然后就懵逼了,官網(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è)置的全局配置就沒用了,如下圖:


image.png

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


image.png
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)
            );
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容