Flutter 1.12后 上传aar至maven私服

前言

本篇写一个将 flutter 打包为 aar 置入已有项目的方案

前篇不同的是: 本篇使用新版本的 flutter 环境, 使用 build aar 命令构建 aar,并上传至 maven 私服

开发环境

$ flutter doctor -v
[] Flutter (Channel stable, v1.12.13+hotfix.7, on Mac OS X 10.15 19A602, locale zh-Hans-CN)
    • Flutter version 1.12.13+hotfix.7 at /Users/caijinglong/Library/Flutter/flutter_dev
    • Framework revision 9f5ff2306b (9 天前), 2020-01-26 22:38:26 -0800
    • Engine revision a67792536c
    • Dart version 2.7.0

准备步骤

创建宿主工程

这个是模拟你本来的项目

作为原生开发者自行使用 Android Studio 创建即可

image

一个标准的 android 项目, 除了 gradle 版本使用 6.1.1, 和 maven 仓库使用阿里云镜像, 其他并没有什么修改

创建 flutter 项目

这个是模拟你的 flutter 项目

使用 module type

$ flutter create -t module flutter_module_example

image

如果你不是这种类型创建的项目, 理论上也可以用 flutter build aar, 但是不保证完全一样

本机启动一个 maven 私服

这里使用 docker-compose 启动, 根据你自己的情况来安装, 如果你有公司的 maven 私服或你不喜欢用 docker, 则根据你自己的实际情况跳过这步或使用别的 maven 私服

image

version: "3"

services:
  nexus:
    image: sonatype/nexus3
    ports:
      - 9000:8081
    volumes:
      - /Volumes/Samsung-T5/docker/nexus/data:/nexus-data

语法是 宿主机:docker 镜像

端口是将 docker 的 8081 映射到本机的 9000 端口

volumes 是映射 nexus 的数据到本机的文件夹内

$ docker-compose up 启动 docker

image

我这里不是初次安装, 所以没有, 你如果是初次安装可以从 data 文件夹内找到 admin.password 查看初始密码

一般初次登陆会让你设置一个, 记住它后面要用到

image

这个就是私服的 maven url 地址

flutter 项目

修改项目

本篇修改一下 flutter 项目, 引入一个path_provider

dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^0.1.2
  path_provider: any

实际开发时别用这个 any 版本号, 我只是懒得看最新版是多少而已

构建 aar

$ flutter build aar 来打包

image

这里 build 完, console 日志有提示你怎么配置你的 host 项目, 如果你是自己开发, 直接用本地的 repo 目录作为仓库就可以了, 将配置复制到项目里即可

repositories 闭包配置可以写在在 host 项目, 也可以配置在 app module 中, 你如果不明白项目和 module 的差别, 可以请教你们安卓原生同事, 也可以自行百度

其他的配置请配置到 app module 里


// 添加 maven 仓库 url
repositories {
    maven {
        url '/Volumes/Samsung-T5/code/flutter/exists_blog/flutter_module_example/build/host/outputs/repo' // 这个是我本地的, 你根据你自己的情况肯定不一样, 不要直接复制粘贴我的, 粘贴命令行里的
    }
    maven {
        url 'http://download.flutter.io' // 这个是flutter的maven仓库地址
    }
}

// 添加依赖
dependencies {
    debugImplementation 'com.example.flutter_module_example:flutter_debug:1.0'
    profileImplementation 'com.example.flutter_module_example:flutter_profile:1.0'
    releaseImplementation 'com.example.flutter_module_example:flutter_release:1.0'
}

// 因为android项目默认是没有profile类型的, 这里需要你自己加一个, 然后配置参考debug
android {
    buildTypes {
        profile {
            initWith debug
        }
    }
}

当然, 实际上不太可能是自己开发, 即便是自己开发, 也不可能家里和公司连目录结构都一模一样, 然后这里就是 maven 私服的作用了, 让依赖相同, 以便于合作开发

分析下构建产物

这里我们注意到, 我们依赖只有一个 flutter_module_example, 没有 path_provider, 这个就是 maven 帮我们处理的了

image

看目录结构, path_provider 是有的, 还分为 release profile debug

image

这里是 flutter 项目对应的 pom 文件, 依赖了三部分代码, 这样 maven 就会自动帮你把这三部分代码都下载并依赖

上传依赖

使用界面上传

image

image

这里分别上传就看见了

image

因为是演示, 我只上传 release 的, 然后在 host 项目里引用

项目里, 根目录的build.gradle

repositories{
    maven{
        url 'http://localhost:9000/repository/maven-releases/' // 你自己的maven私服地址
    }
    maven{
        url 'htt
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
Flutter 插件可以集成本地的 AAR 包和 JAR 包。具体步骤如下: 1. 在 Flutter 项目的 `android` 目录下创建 `libs` 目录,将 AAR 包和 JAR 包复制到该目录下。 2. 在 Flutter 项目的 `android/app/build.gradle` 文件中添加如下配置: ``` repositories { flatDir { dirs 'libs' } } dependencies { // 引入 AAR 包 implementation(name: 'your-aar-filename-without-extension', ext: 'aar') // 引入 JAR 包 implementation files('libs/your-jar-filename.jar') } ``` 3. 在 Flutter 插件的 Android 实现类中,使用以下代码加载本地的 AAR 包和 JAR 包: ``` import android.content.Context; import android.content.res.AssetManager; import android.os.Bundle; import android.util.Log; import io.flutter.embedding.android.FlutterActivity; import io.flutter.embedding.android.FlutterActivityLaunchConfigs; import io.flutter.embedding.android.FlutterView; import io.flutter.embedding.engine.FlutterEngine; import io.flutter.plugin.common.MethodChannel; import org.json.JSONObject; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class MyFlutterActivity extends FlutterActivity { private static final String CHANNEL = "com.example.myapplication/my_channel"; @Override public void configureFlutterEngine(FlutterEngine flutterEngine) { super.configureFlutterEngine(flutterEngine); // 加载 AAR 包中的类 MyAARClass myAARClass = new MyAARClass(); // 加载 JAR 包中的类 MyJARClass myJARClass = new MyJARClass(); // 注册 MethodChannel new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL) .setMethodCallHandler( (call, result) -> { if (call.method.equals("myMethod")) { // 调用 AAR 包中的方法 String aarResult = myAARClass.myMethod(); // 调用 JAR 包中的方法 String jarResult = myJARClass.myMethod(); // 返回结果 JSONObject jsonObject = new JSONObject(); try { jsonObject.put("aarResult", aarResult); jsonObject.put("jarResult", jarResult); } catch (Exception e) { e.printStackTrace(); } result.success(jsonObject.toString()); } else { result.notImplemented(); } } ); } } ``` 这样,就可以在 Flutter 插件中使用本地的 AAR 包和 JAR 包了。注意,在使用 JAR 包时,需要将该包放在 `libs` 目录下,并在 `build.gradle` 文件中添加依赖。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值