摘要
使用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的核心。
实现
核心代码
- 安装flutter sdk
- Android Studio安装
flutter
插件和Dart
插件并重启 - Android Studio新建flutter的module工程
alittlesmile_flutter_module
- 构建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") {
}
}
- 注册页面
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" />
- 启动页面
import io.flutter.embedding.android.FlutterActivity;
FlutterActivity.createDefaultIntent(this)
效果
进入flutter页面 |
---|