总结:
- 默认在Android平台的flutter应用的入口是FlutterActivity,也是Android应用launch activity,所以直接进入flutter
- 现在是从一个已有的应用跳转到flutter,将flutter应用作为Android应用的一个module,通过点击启动flutter应用的FlutterActivity
- 在同一文件下,分别创建Android应用和flutter应用,修改相关文件,完成两个项目的结合
https://github.com/peace2knowledge/Android-Flutter
详细操作
一个现有应用全部使用flutter重写,可能性不大,我们现在尝试在已有的Android 项目中添加Flutter
主要的目的值从Android的Activity中启动FlutterActivity
首先需要分开创建Android项目和Flutter项目
创建一个名字为flutter_part的flutter项目
我们将应用转化为库。修改android/app/build.gradle
文件如下所示。
@@ -11,7 +11,7 @@ if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
-apply plugin: 'com.android.application'
+apply plugin: 'com.android.library'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
@@ -22,8 +22,6 @@ android {
}
defaultConfig {
- // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
- applicationId "com.example.flutterpart"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
复制代码
更新android/app/src/main/AndroidManifest.xml
文件如下
- <application
- android:name="io.flutter.app.FlutterApplication"
- android:label="flutter_part"
- android:icon="@mipmap/ic_launcher">
+ <application>
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
<meta-data android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
android:value="true" />
- <intent-filter>
- <action android:name="android.intent.action.MAIN"/>
- <category android:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
</activity>
</application>
</manifest>
复制代码
修改android/app/src/main/java/com/example/flutterpart/MainActivity.java
文件如下:
public class MainActivity extends FlutterActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
io.flutter.view.FlutterMain.startInitialization(this.getApplicationContext()); // <= New.
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
}
}
复制代码
假设已经有一个创建的Android应用,他有一个button。Android应用和Flutter应用的minSdkVersion需要一样。
确保你的flutter应用和Android应用在同一级文件夹下。
settings.gradle
修改如下:
include ':app', ':flutter_part'
project(':flutter_part').projectDir = new File(settingsDir, '../flutter_part/android/app')
复制代码
当前还不能编译工程,因为flutter模块需要知道flutter 的位置。我们修改local.properties
文件如下:
flutter.sdk=/usr/local/google/home/floitsch/code/flutter/flutter
复制代码
上面是flutter的安装根目录
现在添加implementation project(“:flutter_part”)
依赖到app/build.gradle文件中。
现在,当按钮点击时,调用如下方法
public void startFlutterActivity(View view) {
ComponentName componentName = new ComponentName(this, "com.example.flutterpart.MainActivity");
Intent intent = new Intent().setComponent(componentName);
startActivity(intent);
}
复制代码
运行程序,他可以从Android的Activity跳转到flutter。