安卓原生工程集成Flutter工程

1、建立安卓和Flutter工程

  1. 建立安卓原生工程(語言選擇爲Kotlin,工程命名爲:android_demo) android

  2. 建立Flutter工程(下面是採用IntelliJ IDEA建立的,語言選擇爲Kotlin/Swift,工程命名爲:flutter_demo) git

2、修改Flutter工程

  1. 在Flutter工程下,編輯android/app/build.gradle
  • 將工程改成library工程
apply plugin: 'com.android.application'
複製代碼

改成bash

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"
    }
...
}
複製代碼
  1. 在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>
複製代碼
  1. 在Flutter工程下,修改MainActivity文件
  • 在import代碼中增長:
import io.flutter.view.FlutterMain
複製代碼
  • 在onCreate方法下增長以下代碼:
FlutterMain.startInitialization(this.applicationContext)
複製代碼

最終代碼以下:markdown

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)
  }
}
複製代碼

3、修改安卓原生工程

  1. 打開安卓工程下settings.gradle文件,增長以下配置: (下面Flutter路徑必須是相對路徑,不能用絕對路徑)
include ':app', ':flutter_demo'
project(':flutter_demo').projectDir = new File(settingsDir, '../flutter_demo/android/app')
複製代碼
  1. 在安卓工程下local.properties中,增長以下配置(能夠從Flutter工程下android目錄下local.properties文件中拷貝):
flutter.sdk=本身的flutterSDK路徑
複製代碼
  1. 修改安卓工程下的build.gradle 文件:
  • 在android節點下增長以下內容:
compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
複製代碼
  • 在dependencies節點下增長依賴:
implementation project(「:flutter_demo」)
複製代碼

最終代碼(關鍵代碼節選):app

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation project(":flutter_demo")
    ...
}
複製代碼
  1. 在安卓原生工程中打開Flutter工程界面:
val componentName = ComponentName(this, "com.example.flutter_demo.MainActivity")
val intent = Intent().setComponent(componentName)
startActivity(intent)
複製代碼
  1. 同步一下安卓原生項目,運行一下.

demo源代碼

gitee.com/cxyzy1/andr…ide

相關文章
相關標籤/搜索