首页 > 其他分享 >Android开发笔记[12]-使用AAR方式嵌入flutter页面

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

时间:2024-03-17 15:11:54浏览次数:16  
标签:12 aar module https AAR Android flutter android

摘要

使用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页面

标签:12,aar,module,https,AAR,Android,flutter,android
From: https://www.cnblogs.com/qsbye/p/18078604

相关文章

  • chapter12-动态规划
    动态规划:就是用于求解优化问题的方法。优化问题比如说求最大值or最小值。动态规划的做法就是采用小心地策略进行暴力搜索,在多项式时间内求得最优解。这里的小心策略就是复用子问题的解,将已解决子问题的答案保存下来,在需要子问题答案的时候便可以直接获得,而不需要重复计算,提高效......
  • 【网站项目】012医院住院管理系统
    ......
  • 每日一练:LeeCode-125、验证回文串【字符串+双指针】
    如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个回文串。字母和数字都属于字母数字字符。给你一个字符串s,如果它是回文串,返回true;否则,返回false。示例1:输入:s="Aman,aplan,acana......
  • 关于Android studio无法勾选SDK的问题
    这是我遇到的问题,相信也是大多数人遇到的问题,我的经历是之前下载过一次Androidstudio,用过一段时间后虚拟机出问题了,一直连不上,我都是用手机代替运行,发现太麻烦了,还是决定重新一遍,于是我重新安装了Androidstudio。发现这个地方是无法勾选的,于是我试了好多方法补充:大家没必要去专......
  • Android开发笔记[11]-长按图标显示快捷方式
    摘要配置长按图标的快捷方式.关键信息AndroidStudio:Iguana|2023.2.1Gradle:distributionUrl=https://services.gradle.org/distributions/gradle-8.4-bin.zipjvmTarget='1.8'minSdk21targetSdk34compileSdk34开发语言:Kotlin,JavandkVersion='21.1.6352462�......
  • Android开发笔记[10]-关于页
    摘要构建关于页、最终用户许可页(EULA)页和隐私协议页;Compose页面中嵌入xml布局;Compose页面中添加markdown文本.关键信息AndroidStudio:Iguana|2023.2.1Gradle:distributionUrl=https://services.gradle.org/distributions/gradle-8.4-bin.zipjvmTarget='1.8'minSdk......
  • (容斥原理例题)洛谷P1287 盒子与球
    题目链接点击此处前往题目思路标题就不难知道,这是一道关于容斥原理的题目只需要简单一想就不难发现,这道题很可能会有很多重复的情况,就比如说我原来想的一个思路,先找出r个球来铺满第一层,然后再排列剩下的小球,这就会有很多重复的情况,比如说第一层的去了第二层,但是只是上......
  • YOLOv9改进项目|关于本周更新计划的说明24/3/12
     目前售价售价59.9,改进点30个 专栏地址:专栏介绍:YOLOv9改进系列|包含深度学习最新创新,助力高效涨点!!!日期:24/3/12本周更新计划说明:        1. 更新华为GoldYOLO中的GD机制        2. 更新Bifpn加权双向特征融合     3. 更新去除辅......
  • 3.12毕设
    Aware接口,从字面上理解就是感知捕获。单纯的一个Bean是没有知觉的。在之前的场景中,之所以UserDao能够注入到UserService,有一个前提,就是它两个都是被Spring容器管理的。如果直接new一个UserService,这是没用的,因为UserService没有被Spring容器管理,所以也不会给它里边注入Bean。在实......
  • 初级Android开发学习笔记(三)图形用户界面设计-按钮Button
      按钮Button及按钮处理事件        按钮Button用于处理人机交互的事件,在一般应用程序中常常会用到。由于按钮Button是文本标签TextView的子类,按钮Button继承了文本标签TextView所有的方法和属性。其继承关系如图所示。    按钮Button在程序设计......