一、建立安卓和Flutter工程
-
建立安卓原生工程(語言選擇為Kotlin,工程命名為:android_demo)
-
建立Flutter工程(下面是採用IntelliJ IDEA建立的,語言選擇為Kotlin/Swift,工程命名為:flutter_demo)
二、修改Flutter工程
- 在Flutter工程下,編輯
android/app/build.gradle
:
- 將工程改為library工程
apply plugin: 'com.android.application'
複製程式碼
改為
apply plugin: 'com.android.library'
複製程式碼
- 刪除android節點下defaultConfig下面的applicationId配置 最終程式碼(關鍵程式碼節選):
apply plugin: 'com.android.library'
...
android {
...
defaultConfig {
minSdkVersion 16
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
...
}
複製程式碼
- 在Flutter工程下,開啟android/app/src/main/AndroidManifest.xml檔案
- 刪除application標籤裡面的屬性;
- 將activity的路徑修改為完整路徑;
- 刪除intent-filter節點. 最終程式碼如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.flutter_demo">
<application>
<activity
android:name="com.example.flutter_demo.MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<meta-data
android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true" />
</activity>
</application>
</manifest>
複製程式碼
- 在Flutter工程下,修改
MainActivity
檔案
- 在import程式碼中增加:
import io.flutter.view.FlutterMain
複製程式碼
- 在onCreate方法下增加如下程式碼:
FlutterMain.startInitialization(this.applicationContext)
複製程式碼
最終程式碼如下:
import android.os.Bundle
import io.flutter.app.FlutterActivity
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.view.FlutterMain
class MainActivity: FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
FlutterMain.startInitialization(this.applicationContext)
super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(this)
}
}
複製程式碼
三、修改安卓原生工程
- 開啟安卓工程下
settings.gradle
檔案,增加如下配置: (下面Flutter路徑必須是相對路徑,不能用絕對路徑)
include ':app', ':flutter_demo'
project(':flutter_demo').projectDir = new File(settingsDir, '../flutter_demo/android/app')
複製程式碼
- 在安卓工程下
local.properties
中,增加如下配置(可以從Flutter工程下android目錄下local.properties檔案中拷貝):
flutter.sdk=自己的flutterSDK路徑
複製程式碼
- 修改安卓工程下的build.gradle 檔案:
- 在android節點下增加如下內容:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
複製程式碼
- 在dependencies節點下增加依賴:
implementation project(“:flutter_demo”)
複製程式碼
最終程式碼(關鍵程式碼節選):
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation project(":flutter_demo")
...
}
複製程式碼
- 在安卓原生工程中開啟Flutter工程介面:
val componentName = ComponentName(this, "com.example.flutter_demo.MainActivity")
val intent = Intent().setComponent(componentName)
startActivity(intent)
複製程式碼
- 同步一下安卓原生專案,執行一下.