返回

Flutter in Android: Unlocking Seamless Cross-Platform Development

Android

拥抱Flutter,打造原生级跨平台应用:AAR vs 源码集成

在移动应用开发的世界里,Flutter 正以其跨平台开发优势强势突围。无论你是 Android 还是 iOS 开发者,Flutter 都能让你轻松构建出原生级的应用,省时省力,事半功倍。

那么,如何将 Flutter 集成到你的 Android 项目中呢?两种方式:AAR 集成源码集成

AAR 集成:简单便捷,一键搞定

AAR 集成 是集成 Flutter 最简单的方式,你只需要引入 AAR 文件,就可以轻松将 Flutter 的强大功能集成到你的 Android 项目中。

步骤:

  1. 确保你的 Android Studio 版本不低于 3.0。
  2. 在你的 Android 项目中添加以下代码:
implementation 'io.flutter:flutter_embedding_debug:1.0.0'
  1. 如果你正在使用 release 版本,则需要将上述代码替换为:
implementation 'io.flutter:flutter_embedding_release:1.0.0'
  1. 在你的 app/build.gradle 文件中添加以下代码:
flutter {
    source 'https://maven.google.com'
}
  1. 在你的 app/src/main/AndroidManifest.xml 文件中添加以下代码:
<manifest ...>
    <application>
        ...
        <activity
            android:name="io.flutter.app.FlutterActivity"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize"
            />
        ...
    </application>
</manifest>
  1. 在你的 app/src/main/res/values/strings.xml 文件中添加以下代码:
<resources>
    <string name="app_name">My Flutter App</string>
</resources>
  1. 在你的 app/src/main/res/layout/activity_main.xml 文件中添加以下代码:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <fragment
        android:id="@+id/fragment_container"
        android:name="io.flutter.app.FlutterFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>
  1. 在你的 app/src/main/java/com/example/myapplication/MainActivity.java 文件中添加以下代码:
package com.example.myapplication;

import io.flutter.embedding.android.FlutterFragmentActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.embedding.engine.FlutterEngineCache;
import io.flutter.embedding.engine.dart.DartExecutor;

public class MainActivity extends FlutterFragmentActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FlutterEngine flutterEngine = FlutterEngineCache.getInstance().get("my_engine_id");
        if (flutterEngine == null) {
            flutterEngine = new FlutterEngine(this);
            FlutterEngineCache.getInstance().put("my_engine_id", flutterEngine);
        }

        DartExecutor dartExecutor = flutterEngine.getDartExecutor();
        dartExecutor.executeDartEntrypoint(DartEntrypoint.createDefault());

        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.fragment_container, FlutterFragment.withCachedEngine("my_engine_id")).commit();
    }
}

源码集成:深度定制,掌控全局

源码集成 允许你对 Flutter 进行更深入的定制,从而充分发挥 Flutter 的潜力。

步骤:

  1. 克隆 Flutter 源代码库:
git clone https://github.com/flutter/flutter.git
  1. 安装 Flutter:
cd flutter
./bin/flutter doctor
./bin/flutter install
  1. 创建你的 Android 项目:
cd ../
flutter create my_app
  1. 在你的 app/build.gradle 文件中添加以下代码:
dependencies {
    implementation project(':flutter')
}
  1. 在你的 app/src/main/AndroidManifest.xml 文件中添加以下代码:
<manifest ...>
    <application>
        ...
        <activity
            android:name=".MainActivity"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize"
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        ...
    </application>
</manifest>
  1. 在你的 app/src/main/java/com/example/myapplication/MainActivity.java 文件中添加以下代码:
package com.example.myapplication;

import io.flutter.embedding.android.FlutterActivity;

public class MainActivity extends FlutterActivity {
}
  1. 在你的 app/src/main/res/layout/activity_main.xml 文件中添加以下代码:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <fragment
        android:id="@+id/fragment_container"
        android:name="io.flutter.embedding.android.FlutterFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</FrameLayout>

优劣之争:谁主沉浮?

AAR 集成和源码集成各有千秋,究竟哪种方式更适合你,取决于你的实际需求。

AAR 集成优势:

  • 简单便捷:操作简单,上手快。
  • 稳定可靠:官方支持,兼容性好。
  • 更新及时:跟随 Flutter 版本更新,及时修复 Bug。

AAR 集成劣势:

  • 定制性差:无法对 Flutter 进行深入定制。
  • 扩展性差:难以集成其他第三方库。

源码集成优势:

  • 定制性强:可以根据自己的需求对 Flutter 进行深度定制。
  • 扩展性强:可以轻松集成其他第三方库。
  • 性能优化:可以针对自己的项目进行性能优化。

源码集成劣势:

  • 操作复杂:操作繁琐,学习成本高。
  • 稳定性差:容易出现兼容性问题和 Bug。
  • 更新麻烦:需要手动更新 Flutter 版本,容易遗漏 Bug 修复。

跨越界限,Flutter 为你而来

无论是 AAR 集成还是源码集成,Flutter 都将为你带来前所未有的跨平台开发体验。

拥抱 Flutter,让你的应用触及更多用户,征服更广阔的市场!

常见问题解答

  1. 什么是 Flutter?
    Flutter 是一个开源 UI 框架,用于构建原生级的跨平台移动应用。

  2. AAR 集成和源码集成的区别是什么?
    AAR 集成更简单、更稳定,但定制性较差;源码集成定制性强,但操作更复杂、稳定性较差。

  3. 哪种集成方式更适合我?
    如果你需要快速开发一个简单的应用,则选择 AAR 集成;如果你需要对 Flutter 进行深度定制或集成第三方库,则选择源码集成。

  4. Flutter 可以在哪些平台上使用?
    Flutter 可以用于 Android、iOS、Web、Windows 和 macOS 平台。

  5. Flutter 的未来是什么?
    Flutter 是 Google 积极维护的项目,未来发展前景光明。