Android开发笔记[12]-使用AAR方式嵌入flutter页面

摘要

使用AAR方式嵌入flutter页面.

关键信息

  • Android Studio:Iguana | 2023.2.1
  • Gradle:distributionUrl=https://services.gradle.org/distributions/gradle-8.4-bin.zip
  • jvmTarget = '1.8'
  • minSdk 21
  • targetSdk 34
  • compileSdk 34
  • 开发语言:Kotlin,Java
  • ndkVersion = '21.1.6352462'
  • kotlin版本:1.9.20
  • kotlinCompilerExtensionVersion '1.5.4'
  • com.android.library:8.3

原理简介

flutter简介

[https://docs.flutter.dev/add-to-app/android/add-flutter-screen?tab=default-activity-launch-kotlin-tab]
[https://docs.flutter.dev/add-to-app/android/project-setup?tab=with-android-studio]
[https://docs.flutter.dev/add-to-app]
[https://flutter.cn/docs/resources/architectural-overview]
Flutter 是一个跨平台的 UI 工具集,它的设计初衷,就是允许在各种操作系统上复用同样的代码,例如 iOS 和 Android,同时让应用程序可以直接与底层平台服务进行交互。如此设计是为了让开发者能够在不同的平台上,都能交付拥有原生体验的高性能应用,尽可能地共享复用代码的同时,包容不同平台的差异。

在开发中,Flutter 应用会在一个 VM(程序虚拟机)中运行,从而可以在保留状态且无需重新编译的情况下,热重载相关的更新。对于发行版 (release) ,Flutter 应用程序会直接编译为机器代码(Intel x64 或 ARM 指令集),或者针对 Web 平台的 JavaScript。 Flutter 的框架代码是开源的,遵循 BSD 开源协议,并拥有蓬勃发展的第三方库生态来补充核心库功能。

android的aar/pom方式使用第三方库/模块

[https://juejin.cn/post/6991815038151426055]
[https://blog.csdn.net/ShuSheng0007/article/details/79666505]
[https://blog.51cto.com/u_16099218/6930094]
[https://baike.baidu.com/item/项目对象模型/63986034?fr=ge_ala]
aar是Android Archive的缩写,而我们熟悉的jar则是Java Archive的缩写.说白了`aar就是一种类似于Jar的打包格式。
aar与jar非常类似,基本上都可以理解为一个压缩文件( zip-file )。jar中包含了编译后的class文件以及一些包含元数据的文本文件。而aar比jar多了些Android特有的一些文件,例如layout文件,drawable文件以及manifest文件。说白了,一个aar在Android中就是一个完整的Module.
在Android Studio中添加一个Android Library,然后在此库中开发你所要实现的功能,单独编译此库后,在其outputs目录下就会生成相应的aar文件。
POM是项目对象模型(projectobjectmodel)的简称,是Maven(以项目为中心的设计)对一个单一项目的描述。没有POM的话,Maven是毫无用处的——POM是Maven的核心。

实现

核心代码

  1. 安装flutter sdk
  2. Android Studio安装flutter插件和Dart插件并重启
  3. Android Studio新建flutter的module工程alittlesmile_flutter_module
  4. 构建flutter module
cd alittlesmile_flutter_module
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890
export PATH=$PATH:/opt/homebrew/Homebrew/Cellar/flutter/bin
# flutter pub get --no-example
flutter build aar

You can also build an AAR for your Flutter module in Android Studio using the Build > Flutter > Build AAR menu.
4. 配置android项目
settings.gradle

dependencyResolutionManagement {
-  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+  repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
  repositories {
    google()
    mavenCentral()
+ /* start flutter相关 */
+        maven {
+            url './alittlesmile_flutter_module/build/host/outputs/repo'
+            // This is relative to the location of the build.gradle file
+            // if using a relative path.
+        }
+        maven {
+            url 'https://storage.googleapis.com/download.flutter.io'
+        }
+ /* end flutter相关 */
  }
}

build.gradle(project)

android {
    buildTypes {
        release {
          ...
        }
        debug {
          ...
        }
        create("profile") {
            initWith(getByName("debug"))
        }
}
dependencies {
  // ...
  debugImplementation "cn.qsbye.alittlesmile_flutter_module:flutter_debug:1.0"
  releaseImplementation 'cn.qsbye.alittlesmile_flutter_module:flutter_release:1.0'
  add("profileImplementation", "cn.qsbye.alittlesmile_flutter_module:flutter_profile:1.0")
}

build.gradle(app)

configurations {
    getByName("profileImplementation") {
    }
}
  1. 注册页面
    AndroidManifest.xml
<!-- flutter 页面入口 -->
<activity
android:name="io.flutter.embedding.android.FlutterActivity"
android:theme="@style/Theme.AppCompat.DayNight.NoActionBar"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize" />
  1. 启动页面
import io.flutter.embedding.android.FlutterActivity;
FlutterActivity.createDefaultIntent(this)

效果

进入flutter页面
posted @ 2024-03-17 15:02  qsBye  阅读(73)  评论(0编辑  收藏  举报